2011-11-16 35 views
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.

我非常困惑。有谁知道什么是错的?

编辑:

有人帮我弄明白了。函数签名实际上是错误的,并且缺少一个参数。这很愚蠢,但很难弄清楚。

+1

有人帮我弄明白了。函数签名实际上是错误的,并且缺少一个参数。这很愚蠢,但很难弄清楚。 – Jary

+0

你似乎在使用C++。考虑使用[Gtkmm](http://www.gtkmm.org)C++包装器,它为C中缺少它的大多数地方增加了(编译时)类型安全性。Plus允许您直接连接方法。 –

+0

非常感谢。 – Jary

回答