2013-03-28 183 views
0

我想在包含一个框的GTKMM中创建一个简单的窗口。我有窗口部分工作,但我不能让我的箱子代码工作。我跟着this tutorialGTKMM错误:空值不会被忽略,因为它应该是

我觉得教程有点过时,因为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++新手])。我知道堆中的项目应该像指针一样使用,因此对于添加函数我是这样做的(而不是使用本教程中描述的点符号)。当我运行此代码时,出现以下错误:

error:void value not ignored as it out to be 

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

回答

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

+0

谢谢你,它的工作!我关闭了额外的引用,并将add()函数中的*框留在了相同的位置。 – foobar5512

+0

@Blakeasd:好的,很高兴帮助! –

相关问题