正如标题中已经说过的,我收到一个编译错误,似乎无法修复:
error: redefinition of 'tinygecko_notebook_get_type'
note: previous definition of 'tinygecko_notebook_get_type' was here
其中错误指向此行(此代码段的第一个):
GType
tinygecko_notebook_get_type (void)
{
static GType type = 0;
if (type == 0) {
static const GTypeInfo info = {
sizeof (TinygeckoNotebookClass), /* size of class struct */
NULL, /* base_init */
NULL, /* base_finalize */
(GClassInitFunc)tinygecko_notebook_class_init, /* class_init */
NULL, /* class_finalize */
NULL, /* class_data */
sizeof (TinygeckoNotebook),
0, /* n_preallocs */
(GInstanceInitFunc)tinygecko_notebook_init /* instance_init */
};
type = g_type_register_static (GTK_TYPE_NOTEBOOK, "TinygeckoNotebook", &info, 0);
}
return type;
}
并且注释行指向类型设置
G_DEFINE_TYPE (TinygeckoNotebook, tinygecko_notebook, GTK_TYPE_NOTEBOOK);
这两个代码片段都位于.c文件中(注释行位于错误行上方)。
帮助赞赏..我很困惑。为什么该gtk +宏应该重新定义我必须为自己的基于gobject的类初始化和终结器(如果存在)(在这种情况下基于GtkNotebook)设置的函数。
最佳答案
G_DEFINE_TYPE是允许您避免编写get_type函数的快捷方式。因此,如果要手动实现get_type函数,则不想使用G_DEFINE_TYPE。
在这种情况下,我没有注意到您的手动编码实现中有什么特别的地方,看起来就像通常的样板一样,因此您可以删除它并使用G_DEFINE_TYPE。
还有G_DEFINE_TYPE的变体,例如G_DEFINE_TYPE_WITH_CODE,G_DEFINE_ABSTRACT_TYPE,G_DEFINE_TYPE_EXTENDED等,它们使您稍微偏离了纯样板,仍然避免手工做。
关于c - 重新定义* _get_type(void)gtk +要求的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5107296/