【问题标题】:GTKMM Error: Void Value Not Ignored As it Ought to BeGTKMM 错误:不应忽略无效值
【发布时间】:2013-03-28 23:18:26
【问题描述】:

我正在尝试在 GTKMM 中创建一个包含框的简单窗口。我已经让窗口部分工作,但我无法让我的盒子代码工作。我正在关注this tutorial

我认为本教程有点过时,因为 Anjuta(我正在使用的 IDE)生成了一些不同的代码。这是我应该添加一个框的代码:

 #include <gtkmm.h>
#include <iostream>
#include "config.h"
 using namespace Gtk;



  int main (int argc, char *argv[])
  {
Gtk::Main kit(argc, argv);


Gtk::Window *main_win = new Gtk::Window (Gtk::WINDOW_TOPLEVEL);
main_win->set_title ("Image-Viewer");

Gtk::Box *box = Gtk::manage (new Gtk::Box());
box ->set_orientation (ORIENTATION_VERTICAL);
box->set_spacing(6);
*main_win -> add(*box);

if (main_win)
{
    kit.run(*main_win);
}
return 0;
 }

在本教程的代码中,窗口的创建方式不同。正如您在下面看到的,我的代码中的窗口正在创建,因此它位于堆中,而不是堆栈中。 (或者至少我认为[我是 C++ 新手])。我知道堆中的项目应该像指针一样使用,所以对于 add 函数,我这样做了(而不是使用教程中描述的点符号)。当我运行此代码时,我收到一条错误消息:

error:void value not ignored as it out to be

错误与在窗口上调用的 add 方法有关。有人可以告诉我我做错了什么吗?谢谢

【问题讨论】:

    标签: c++ gtk gtkmm


    【解决方案1】:

    这条指令:

    Gtk::Window *main_win = new Gtk::Window (Gtk::WINDOW_TOPLEVEL);
    

    声明一个指向Gtk::Window 的指针。稍后,您会这样做:

    *main_win -> add(*box);
    

    这是不正确的,因为您基本上在取消引用 main_win 指针之后尝试应用 operator -&gt; - 而这种取消引用的结果不是指针本身,而是对Gtk::Window 类型的对象。

    要解决此问题,请删除额外的取消引用:

    main_win -> add(*box);
    

    注意:

    我不知道Gtk::Window 及其成员函数add(),但如果add() 接受一个指针 作为它的参数,那么你也不应该取消引用@ 987654331@.

    【讨论】:

    • 谢谢,成功了!我取消了额外的取消引用,并将 add() 函数中的 *box 保持不变。
    • @Blakeasd:好的,很高兴它有帮助!
    猜你喜欢
    • 2011-11-10
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    相关资源
    最近更新 更多