C 重新定义*u get_type(void)gtk+;要求的方法

C 重新定义*u get_type(void)gtk+;要求的方法,c,compiler-errors,gtk,gobject,redefinition,C,Compiler Errors,Gtk,Gobject,Redefinition,正如标题中已经提到的,我遇到了一个编译错误,我似乎无法修复: error: redefinition of 'tinygecko_notebook_get_type' note: previous definition of 'tinygecko_notebook_get_type' was here 其中error指向此行(此代码段的第一行): 注释行指向类型设置 G_DEFINE_TYPE (TinygeckoNotebook, tinygecko_notebook, GTK_TYPE_N

正如标题中已经提到的,我遇到了一个编译错误,我似乎无法修复:

error: redefinition of 'tinygecko_notebook_get_type'
note: previous definition of 'tinygecko_notebook_get_type' was here
其中error指向此行(此代码段的第一行):

注释行指向类型设置

G_DEFINE_TYPE (TinygeckoNotebook, tinygecko_notebook, GTK_TYPE_NOTEBOOK);
这两个代码段都位于.c文件中(注释行位于错误行上方)


谢谢你的帮助。。我很困惑。为什么gtk+宏要重新定义一个我必须为自己的基于gobject的类初始化器和终结器(如果存在)设置的函数(在本例中基于GtkNotebook)。

G\u DEFINE\u TYPE是一个快捷方式,允许您避免编写get\u TYPE函数。因此,如果手动实现get_TYPE函数,就不希望使用G_DEFINE_TYPE

在这种情况下,我没有注意到您的手工编码实现中有任何特殊之处,看起来就像是普通的样板文件,因此您可以删除它并使用G_DEFINE_TYPE

还有一些G_DEFINE_类型的变体,如G_DEFINE_TYPE_WITH_CODE、G_DEFINE_ABSTRACT_TYPE、G_DEFINE_TYPE EXTENDED等,这些变体允许您稍微偏离纯样板文件,但仍然避免手工操作

G_DEFINE_TYPE (TinygeckoNotebook, tinygecko_notebook, GTK_TYPE_NOTEBOOK);