重新定义*
问题描述:
由于已经由标题说_get_type(无效)GTK + requried方法,我得到一个编译错误我似乎无法修复:重新定义*
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的类initalizer和终结器(如果它们存在)设置(在这种情况下基于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等,让你从单纯的样板偏离了一下,仍然避免了手工做这一切的变体。