ошибка: пустое значение не игнорируется, как должно быть - C / GTK + - PullRequest
0 голосов
/ 22 апреля 2011

Я пытаюсь создать окно в GTK +, которое имеет вкладку выглядит следующим образом:

enter image description here

Всякий раз, когда пользователь нажимает кнопку «Создать», появляется новая вкладка.

Однако, когда я компилировал свою программу, я получил ошибку : значение 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 <gtk/gtk.h>

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;
}


Спасибо за вашу помощь !! Я действительно ценю это!

Ответы [ 2 ]

4 голосов
/ 22 апреля 2011

Номер строки не имеет для меня особого смысла, но я думаю, что ваша проблема именно здесь (переформатирована для иллюстративных целей):

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

Вы вызываете функцию new_tab внутри макроса G_CALLBACK. Функция new_tab возвращает void (т. Е. Нет возвращаемого значения), но она вызывается в контексте, которому необходимо значение и, следовательно, ошибка «void value not ignored». Я думаю, вы хотите сказать что-то вроде этого:

g_signal_connect(G_OBJECT(button), "new_tab", G_CALLBACK(new_tab), NULL);
2 голосов
/ 22 апреля 2011
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).

Для вашего запроса выможете обратиться к этому небольшому учебнику .

...