2013-03-21 61 views
1

我目前正在学习如何使用GObject,并且有一点我绝对不明白:类和实例结构有什么区别(如“MamanBarClass”“MamanBar”)resp。我如何使用它们?
此刻,我将所有对象属性都放入私有结构中(如“MamanBarPrivate”),将其注册为“g_type_class_add_private”并定义属性/ getters/setters来访问它们。但是,当我离开阶级结构空我会在“g_type_register_static_simple”以下错误:类和实例结构之间的差异

specified class size for type `MamanBar' is smaller than `GTypeClass' size 

为什么在类结构(如“GtKWidgetClass”)中定义的所有对象的方法?也许我只是搞砸了一切,但我只用Delphi工作了OOP,但(我知道,没有什么可骄傲的:d)

问候

回答

2

目前我正在学习如何使用GObject,有一点我绝对不明白:类和实例结构(如“MamanBarClass”和“MamanBar”)之间的区别是什么?我如何使用它们?

该类结构只创建一次,而不是实例特定的。这就是你放置非特定实例的东西的地方,例如虚拟方法的指针(这是类结构最常见的用途)。

目前,我把我的对象属性为一体的民营结构(如“MamanBarPrivate”),以“g_type_class_add_private”注册,并定义属性/ getter/setter方法来访问它们。

好。这是正确的做法。

但是,当我离开阶级结构空我在“g_type_register_static_simple”收到以下错误:

你不应该离开阶级结构空。它应该总是包含你继承的类型的类结构。例如,如果你想创建一个GObject的,阶级结构应该是这样的(至少):

struct _MamanBarClass { 
    GObjectClass parent_class; 
}; 

即使你不是从GObject的继承,你仍然需要基类GType:

struct _FooClass { 
    GTypeClass parent_class; 
}; 

这是how simple inheritance is done in C

为什么所有在类结构中定义的对象方法(如“GtKWidgetClass”)?也许我只是搞砸了一切,但我只用Delphi对OOP工作,但(我知道,没有什么可骄傲的:d)

这些都是virtual public methods。至于它们为什么在类结构中定义而不是在实例结构中定义,这是因为每个实例的实现都是相同的。

+1

Thanks dude,我没有明白,我的类结构需要我继承的类结构,而不仅仅是**指针**。所以继承是有道理的! – 2013-03-21 20:50:01

相关问题