错误:无法忽略void值,因为它应该是 – C / GTK +

我试图在GTK +中创建一个窗口,其中的标签如下所示:

在此处输入图像描述

只要用户单击“新建”按钮,就会出现一个新选项卡。

但是,当我编译我的程序时,我得到一个错误:void值不应该被忽略,因为它应该是

phongcao@phongcao:~$ g++ /home/phongcao/C++/GTK+/newtab.cc -o /home/phongcao/C++/GTK+/newtab `pkg-config gtk+-2.0 --cflags --libs` /home/phongcao/C++/GTK+/newtab.cc: In function 'int main(int, char**)': /home/phongcao/C++/GTK+/newtab.cc:51:3: error: void value not ignored as it ought to be 

这是代码:

 #include  void destroy(GtkWidget *window, gpointer data) { gtk_main_quit(); } void new_tab(GtkNotebook *notebook, GtkWidget *content, GtkWidget *hbox) { gtk_notebook_append_page(notebook, content, hbox); } int main(int argc, char *argv[]) { GtkWidget *window, *label, *content; GtkWidget *button, *hbox, *notebook; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER(window), 10); gtk_window_set_title(GTK_WINDOW(window), "New Tab"); gtk_widget_set_size_request(window, 300, 200); notebook = gtk_notebook_new(); button = gtk_button_new_with_label("New"); label = gtk_label_new("Tab"); hbox = gtk_hbox_new(FALSE, 5); content = gtk_label_new("This is a tab"); gint a = 0; gtk_box_pack_start_defaults(GTK_BOX(hbox), label); gtk_box_pack_start_defaults(GTK_BOX(hbox), button); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), content, hbox); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); //This following line is where the error is from: g_signal_connect(G_OBJECT(button), "new_tab", G_CALLBACK(new_tab(GTK_NOTEBOOK(notebook), content, hbox)), NULL); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL); gtk_container_add(GTK_CONTAINER(window), notebook); gtk_widget_show_all(hbox); gtk_widget_show_all(window); gtk_main(); return 0; } 

谢谢你的帮助!! 对此,我真的非常感激!!

行号对我来说没有多大意义,但我认为你的问题就在这里(为了说明目的而重新格式化):

 g_signal_connect(G_OBJECT(button), "new_tab", G_CALLBACK(new_tab(GTK_NOTEBOOK(notebook), content, hbox)), /* <== Badness */ NULL ); 

您正在G_CALLBACK宏中调用new_tab函数。 new_tab函数返回void (即没有返回值),但是在需要值的上下文中调用它,因此“void new_tab not ignored”错误。 我想你的意思是说更像这样的话:

 g_signal_connect(G_OBJECT(button), "new_tab", G_CALLBACK(new_tab), NULL); 
 g_signal_connect(G_OBJECT(button), "new_tab", G_CALLBACK(new_tab(GTK_NOTEBOOK(notebook), content, hbox)), NULL); 

您确定要将参数传递给new_tab()吗? 简单地说G_CALLBACK(new_tab) 。 这将解决错误。

如果要调用“new_tab”,则必须在适当的位置显式调用该函数(比如在传递给G_CALLBACK之前)。

对于您的查询,您可以参考这个小教程 。