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

发布于 2024-10-19 05:13:13 字数 1319 浏览 5 评论 0原文

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

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)。

As already said by the headline, I get a compile error I seem to be unable to fix:

error: redefinition of 'tinygecko_notebook_get_type'
note: previous definition of 'tinygecko_notebook_get_type' was here

Where error points to this line (the first of this codes snippet):

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;
}

and the note line points to the type setup

G_DEFINE_TYPE (TinygeckoNotebook, tinygecko_notebook, GTK_TYPE_NOTEBOOK);

Both snippets are located within the .c file (the note line is above the error line).

Help appreciated.. I am confused. Why should that gtk+ macro redefine a function which I have to setup for own gobject based class initalizer and finalizer (if they exist) (in this case based on GtkNotebook).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

陌上芳菲 2024-10-26 05:13:13

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 等,这些变体可以让您稍微偏离纯样板文件,但仍然可以避免全部手动完成。

G_DEFINE_TYPE is a shortcut to allow you to avoid writing the get_type function. So you don't want to use G_DEFINE_TYPE if you're implementing the get_type function by hand.

In this case I don't notice anything special in your handcoded implementation, looks like just the usual boilerplate, so you can probably just delete it and use G_DEFINE_TYPE.

There are also variants of G_DEFINE_TYPE such as G_DEFINE_TYPE_WITH_CODE, G_DEFINE_ABSTRACT_TYPE, G_DEFINE_TYPE_EXTENDED, etc. that let you deviate from pure boilerplate a bit and still avoid doing it all by hand.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文