Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ glade文件中的gtkmm生成器不';行不通_C++_Glade_Gtkmm - Fatal编程技术网

C++ glade文件中的gtkmm生成器不';行不通

C++ glade文件中的gtkmm生成器不';行不通,c++,glade,gtkmm,C++,Glade,Gtkmm,我的gtkmm程序不会显示任何窗口。编译效果很好。以下是我在运行时收到的消息: (process:2312): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.24.1/gobject /gtype.c:2706: You forgot to call g_type_init() (process:2312): GLib-CRITICAL **: g_once_init_leave: assertion `initialization

我的gtkmm程序不会显示任何窗口。编译效果很好。以下是我在运行时收到的消息:

(process:2312): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.24.1/gobject    
/gtype.c:2706: You forgot to call g_type_init()
(process:2312): GLib-CRITICAL **: g_once_init_leave: assertion 
`initialization_value != 0' failed
(process:2312): GLib-GObject-CRITICAL **: g_object_newv: assertion 
`G_TYPE_IS_OBJECT (object_type)' failed
代码是:

int main(int argc, char** argv) {
    Glib::RefPtr<Gtk::Builder> builder =   
         Gtk::Builder::create_from_file("basic.glade");
    Gtk::Window* pMyWindow = 0;
    builder->get_widget("window1", pMyWindow);
    pMyWindow->show();
}
int main(int argc,char**argv){
Glib::RefPtr生成器=
Gtk::Builder::从_文件(“basic.glade”)创建_;
Gtk::Window*pMyWindow=0;
生成器->获取窗口小部件(“窗口1”,pMyWindow);
pMyWindow->show();
}
basic.glade是有效文件还是不存在并不重要。我尝试使用整个路径文件而不是basic.glade。
当我调试它时,我意识到程序永远不会离开构建器的第一行。就像它一直在运行一样,所以当我暂停唯一的进程时,要么在
g\u once\u init\u enter\u impl()
要么在
g\u slist\u find()
(由前者调用)。
因此,我从来没有看到任何窗口(因为它永远不会到达
pMyWindow->show()
行)

main
中添加以下行作为第一行:

Gtk::Main kit(argc, argv);
根据报告:

首先,我们实例化一个名为kit的对象。这是Gtk::Main类型。每个gtkmm程序都必须具有其中一个

此对象负责初始化所有GTK+库,其中包括对错误讨论中的
g_type_init
函数的调用

当然,您可以使用任何您喜欢的名称来代替
kit

更新:哦,你应该打电话到:

Gtk::Main::run();
或相当于:

kit.run();

正如Erandros在评论中善意地指出的那样。没有它,程序将立即完成。它将发出一个
gtk_main()
调用,该调用将运行主循环。

为了运行GUI,请添加
kit.run()
,因此我将此标记为正确。快速提问,是否必须在main中销毁(释放内存)窗口?