2
我想通过g_signal_connect传递堆中分配的数据,但它显示了一些奇怪的行为。GTK +:传递数据与g_signal_connect不工作
我传递的价值是这样的:
int *test = new int(100);
g_signal_connect(G_OBJECT(deviceButton), "button_press_event", G_CALLBACK(showDeviceAndConnect), (gpointer) test);
并打印值:
static void showDeviceAndConnect(GtkWidget * deviceButton, gpointer data)
{
int *test = (int *) data;
fprintf(stderr, "Test: %d\n", *test);
}
是被印刷的值是4的所有时间。我改变了新的int()为3,5等,它总是打印4.
我非常困惑。有谁知道什么是错的?
编辑:
有人帮我弄明白了。函数签名实际上是错误的,并且缺少一个参数。这很愚蠢,但很难弄清楚。
有人帮我弄明白了。函数签名实际上是错误的,并且缺少一个参数。这很愚蠢,但很难弄清楚。 – Jary
你似乎在使用C++。考虑使用[Gtkmm](http://www.gtkmm.org)C++包装器,它为C中缺少它的大多数地方增加了(编译时)类型安全性。Plus允许您直接连接方法。 –
非常感谢。 – Jary