gtk+2.0中GtkObject结构中没有klass成员的解决办法

简介:

gtk+2.0中一些较老的程序中会有如下的代码:

#define EVENT_METHOD(obj, method) GTK_WIDGET_CLASS(GTK_OBJECT(obj)->klass)->method

但是编译时会出现如下错误:

no member named 'klass' in 'struct _GtkObject'

使用编译的库是gtk+2.0,在源代码开头加上定义#define GTK_ENABLE_BROKEN也不行。

打开gtkobject.h头文件,发现其中有几个宏:

#define GTK_TYPE_OBJECT              (gtk_object_get_type ())

#define GTK_OBJECT(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), GTK_TYPE_OBJECT, GtkObject))

#define GTK_OBJECT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_OBJECT, GtkObjectClass))

#define GTK_IS_OBJECT(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), GTK_TYPE_OBJECT))

#define GTK_IS_OBJECT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_OBJECT))

#define GTK_OBJECT_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), GTK_TYPE_OBJECT, GtkObjectClass))

看到最后一个了吗?将最开始的代码修改如下即可:

#define EVENT_METHOD(obj,method) GTK_WIDGET_CLASS(GTK_OBJECT_GET_CLASS(obj))->method

可能是较新的gtk中将结构的klass元素隐藏起来了,我们不可以直接引用klass结构元素,使用宏间接访问吧。

相关文章
|
6月前
|
存储 Cloud Native Linux
CMake学习之内部变量
CMake学习之内部变量
|
7月前
[MFC][bug记录]MFC移植对话框属性
[MFC][bug记录]MFC移植对话框属性
VS2010(VC10)如何查看某个类的变量(函数)使用情况
VS2010(VC10)如何查看某个类的变量(函数)使用情况
|
10月前
|
测试技术
QT --- VS2017+Qt5.12 编译报错【E2512 功能测试宏的参数必须是简单标识符 】的解决方法
QT --- VS2017+Qt5.12 编译报错【E2512 功能测试宏的参数必须是简单标识符 】的解决方法
264 0
|
9月前
怎么删除360base64.dll,这个方法百分百管用
怎么删除360base64.dll,这个方法百分百管用
225 0
|
12月前
|
存储 编解码 编译器
GNU C 扩展语法:零初始化数组
零长度数组、变长度数组都是 GNU C 编译器支持的数组类型。今天我们来回顾一下零长度数组。
112 0
|
网络协议 C# C++
关于 C#调用一个C/C++dll库运行时实现多个应用(静态变量区分) 的解决方法
关于 C#调用一个C/C++dll库运行时实现多个应用(静态变量区分) 的解决方法
关于 C#调用一个C/C++dll库运行时实现多个应用(静态变量区分) 的解决方法
gtk_init参数传递过程(草稿)
gtk_init参数传递过程(草稿)
56 0
|
编译器 C++
为已有C项目添加qt界面报错:XXX未声明的使用
为已有C项目添加qt界面报错:XXX未声明的使用
118 0
Qt-调用CAN开发包时,显示无法找到调用函数
说先,对下错误,免得看半天发现说的不是一个东西
280 0