gpt4 book ai didi

c++ - g_signal_connect 错误成员使用无效

转载 作者:行者123 更新时间:2023-11-30 02:11:53 26 4
gpt4 key购买 nike

我正在尝试编译一些代码,但出现以下错误:

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,会以任何方式影响这个问题?

最佳答案

由于 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++ 绑定(bind)。

关于c++ - g_signal_connect 错误成员使用无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2678665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com