Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++ GyStalalSub连接传递数据_C++_Gtk - Fatal编程技术网

C++ GyStalalSub连接传递数据

C++ GyStalalSub连接传递数据,c++,gtk,C++,Gtk,我试图连接一个对象来销毁一个小部件,但什么也没发生,我得到了一个错误 这是电话: g_signal_connect(bKill, "clicked", G_CALLBACK(AppWindow::kill), (gpointer *)bBuzz); 方法是: void AppWindow::kill(GtkWidget* widget, gpointer data) { gtk_widget_destroy(GTK_WIDGET(data)); } 然而,什么也没有发生。几乎就好像该

我试图连接一个对象来销毁一个小部件,但什么也没发生,我得到了一个错误

这是电话:

g_signal_connect(bKill, "clicked", G_CALLBACK(AppWindow::kill), (gpointer *)bBuzz);
方法是:

void AppWindow::kill(GtkWidget* widget, gpointer data)
{
    gtk_widget_destroy(GTK_WIDGET(data));
}
然而,什么也没有发生。几乎就好像该方法甚至没有被调用一样。使用g_print检查是否调用也不起作用

下面是我得到的错误:

(kpf:15885): GLib-GObject-WARNING **: invalid (NULL) pointer instance

(kpf:15885): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

我错过什么了吗?还是我真的把代码弄糟了?我对GTK还是有点陌生,所以我肯定出了什么问题。

您不能将类方法传递给g_signal_connect,因为它们有一个隐式的第一个参数,成为这个参数。您必须使用常规函数,并找到一种方法在数据参数中同时传递bBuzz变量和this指针


可选地,可以使用GTKMM,它已经完全优化为C++。

< P>不能将类方法传递给GySealAlxLink,因为这些参数有一个隐式的第一个参数。您必须使用常规函数,并找到一种方法在数据参数中同时传递bBuzz变量和this指针


可选的,可以使用GTKMM,它已经完全优化了C++。我甚至不知道gtkmm。谢谢,一个upvoteI也有同样的问题,但是对于实现信号,代码是g_signal\u connectthis,realize,g_CALLBACKMainWindow::WindowRealize,NULL;。为什么会出现同样的警告?这是一样的:如果MainWindow::WindowRealize是一个类方法,它有一个隐式的first this参数,因此不能作为信号处理程序工作。如果gtkmm是不可能的,您可以改用静态方法,将其作为数据传递,并在内部回溯。在您的特定情况下,这是一个选项,因为您当前正在为数据传递NULL。如果OP想要这样做,他们需要让他们的数据成为该类的成员。你的答案非常有用。我甚至不知道gtkmm。谢谢,一个upvoteI也有同样的问题,但是对于实现信号,代码是g_signal\u connectthis,realize,g_CALLBACKMainWindow::WindowRealize,NULL;。为什么会出现同样的警告?这是一样的:如果MainWindow::WindowRealize是一个类方法,它有一个隐式的first this参数,因此不能作为信号处理程序工作。如果gtkmm是不可能的,您可以改用静态方法,将其作为数据传递,并在内部回溯。在您的特定情况下,这是一个选项,因为您当前正在为数据传递NULL。如果OP想要这样做,他们就需要将他们的数据作为类的成员。