我在尝试调用我的狗级"谈话"功能时会收到以下错误:"谈话"不是_dogfile的成员。
实际上,我已经在_dogfileclass结构中声明了狗文件,在class_init中,我指着谈话功能。如何从类实例访问类方法?
我包括相关代码:
dog.h:
struct _DogFileClass
{
GObjectClass parent_class;
void (*talk)(DogFile *self)
}
void dog_file_talk(DogFile *self);
dog.c
void dog_file_real_talk(DogFile *self);
void dog_file_class_init(DogFileClass *klass)
{
klass->talk = dog_file_real_talk;
}
void dog_file_talk(DogFile *self)
{
g_return_if_false(DOG_IS_FILE);
DogFileClass *klass = DOG_FILE_GET_CLASS(self);
return klass->talk(self);
}
dog_file_real_talk(DogFile *self)
{
printf("WOOF")
}
最后,我想以以下方式使用谈话功能: dog->talk(dog);
当狗是指向狗狗类的指针
最后,我想以下面的方式使用谈话功能:dog-> Talk(Dog);当狗是指向狗狗类的指针
这是不可能的,因为talk
不是DogFile
结构的成员。您的dog_file_talk()
中的代码看起来正确,因此不尝试使用dog->talk (dog)
,而是使用dog_file_talk (dog)
。
我恐怕这是您最接近的带有gobject的OOP。如果您要在DogFile
结构上有talk
成员,则该指针将针对DogFile
的每个实例进行复制,这将阻止子类可通过子类过度付出,并且是浪费内存。
如果您想要更多的"天然" OOP,请直接使用C (或更现代的语言)。