g_signal_connect error invalid use of member
我试图编译一些代码,但得到了以下错误:
1 | error: invalid use of member (did you forget the ‘&’ ?) |
这来自G_信号_连接呼叫:
1 2 | g_signal_connect ((gpointer) Drawing_Area_CPU,"expose-event", G_CALLBACK (graph_expose), NULL); |
号
1 | gboolean graph_expose(GtkWidget *widget, GdkEventExpose *event, gpointer data); |
据我所知,我做的每件事都很好,但我还是得到了这个错误。有人能帮忙吗?
更新:
抱歉,伙计们,我搞糊涂了,我的
由于GTK+是用纯C语言编写的,回调必须是纯函数或静态方法,因此如果希望能够使用类方法作为回调,则必须使用某种静态代理方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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,它是C++绑定的GTK+。