重新定义* _get_type(void)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等,它们可以让您偏离纯粹的样板,并且仍然可以避免手动完成所有操作。     

要回复问题请先登录注册