переопределение * _get_type (void) gtk + требуемый метод - PullRequest
0 голосов
/ 24 февраля 2011

Как уже было сказано в заголовке, я получаю ошибку компиляции, которую, кажется, не могу исправить:

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

, а строка note указывает на настройку типа

G_DEFINE_TYPE (TinygeckoNotebook, tinygecko_notebook, GTK_TYPE_NOTEBOOK);

Оба фрагмента находятся в файле .c ( примечание строка выше ошибка строка).

Помощь оценена .. Я в замешательстве.Почему этот макрос gtk + переопределяет функцию, которую я должен настроить для собственного инициализатора и финализатора класса на основе gobject (если они существуют) (в данном случае на основе GtkNotebook).

1 Ответ

1 голос
/ 24 февраля 2011

G_DEFINE_TYPE - это ярлык, позволяющий избежать написания функции get_type. Поэтому вы не хотите использовать G_DEFINE_TYPE, если вы реализуете функцию get_type вручную.

В этом случае я не замечаю ничего особенного в вашей реализации с кодировкой, похожей на обычный шаблон, так что вы можете просто удалить его и использовать G_DEFINE_TYPE.

Существуют также варианты G_DEFINE_TYPE, такие как G_DEFINE_TYPE_WITH_CODE, G_DEFINE_ABSTRACT_TYPE, G_DEFINE_TYPE_EXTENDED и т. Д., Которые позволяют вам немного отклониться от чистого шаблона и при этом избегать делать все вручную.

...