2011-02-24 65 views
0

由于已经由标题说_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)。

回答

1

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等,让你从单纯的样板偏离了一下,仍然避免了手工做这一切的变体。