gpt4 book ai didi

c - 重新定义 *_get_type(void) gtk+ 所需方法

转载 作者:行者123 更新时间:2023-11-30 16:02:36 24 4
gpt4 key购买 nike

正如标题所说,我收到一个编译错误,我似乎无法修复:

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 文件中(note 行位于error 行上方)。

感谢帮助..我很困惑。为什么 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com