2013-03-28 182 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:好的,很高興幫助! –

相關問題