GTKMM错误:空虚值不会被忽视,因为它应该是

时间:2013-03-28 23:18:27

标签: c++ gtk gtkmm

我正在尝试在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方法有关。可以告诉我我做错了什么吗?感谢

1 个答案:

答案 0 :(得分:2)

这条指令:

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

声明指向Gtk::Window的指针。稍后,你做:

*main_win -> add(*box);

这是不正确的,因为在您已经取消引用operator ->指针之后,您基本上尝试应用main_win - 并且此解除引用的结果是而不是指针本身,但是对Gtk::Window类型的对象的引用。

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

main_win -> add(*box);

注意:

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