2011-02-24 88 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等,讓你從單純的樣板偏離了一下,仍然避免了手工做這一切的變體。