我正在尝试编译一些代码,我收到以下错误:
error: invalid use of member (did you forget the ‘&’ ?)
这来自g_signal_connect调用:
g_signal_connect ((gpointer) Drawing_Area_CPU, "expose-event",
G_CALLBACK (graph_expose), NULL);
Drawing_Area_CPU
是GtkWidget *
,graph_expose
定义为:
gboolean graph_expose(GtkWidget *widget, GdkEventExpose *event, gpointer data);
到目前为止,我可以告诉即时通信,但我仍然得到这个错误。有人可以帮忙吗?
更新:
对不起伙计们,我感到很困惑,我的graph_expose
函数在一个类中,而我正在尝试从该类的构造函数中执行g_signal_connect
,这会影响到任何问题。方式是什么?
答案 0 :(得分:4)
由于GTK +是用普通的C编写的,回调必须是普通函数或静态方法,所以如果你想能够使用类方法作为回调,你必须使用某种静态代理方法:
class foo {
foo () {
g_signal_connect (GtkWidget *widget, GdkEventExpose *event,
G_CALLBACK (foo::graph_expose_proxy), this);
}
gboolean graph_expose (GtkWidget *widget, GdkEventExpose *event) {
// sth
}
static gboolean graph_expose_proxy (GtkWidget *widget, GdkEventExpose *event, gpointer data) {
foo *_this = static_cast<foo*>(data);
return _this->graph_expose (widget, event);
}
}
或者,您也可以使用GTKmm,它是GTK +的C ++绑定。