2011-09-23 11 views
0

GObjectライブラリをマスターしようとしています。だから私はGtkHBoxから継承して簡単なGtk +カスタムウィジェットを作ろうとしました。問題がどこにあるのか、どこに問題があるのか​​わからないので、コード全体を貼り付ける必要があります。奇妙なCランタイムエラーを理解できません。助けが必要?

#include "common.h" 
#include "notetab.h" 

GtkType pro_note_tab_get_type() 
{ 
    GtkType pro_note_tab_type = 0; 

    if (!pro_note_tab_get_type) 
    { 
     static const GtkTypeInfo pro_note_tab_info = 
     { 
      "ProNoteTab", 
      sizeof(ProNoteTab), 
      sizeof(ProNoteTabClass), 
      (GtkClassInitFunc) NULL, 
      (GtkObjectInitFunc) NULL, 
      NULL, 
      NULL, 
      (GtkClassInitFunc) NULL 
     }; 

     pro_note_tab_type = gtk_type_unique(GTK_TYPE_WIDGET, &pro_note_tab_info); 
    } 

    return pro_note_tab_type; 
} 

GtkWidget* pro_note_tab_new(void) 
{ 
    return GTK_WIDGET(gtk_type_new(pro_note_tab_get_type())); 
} 

notetab.c

#ifndef NOTETAB_H 
#define NOTETAB_H 

G_BEGIN_DECLS 

#define PRO_NOTE_TAB(obj) GTK_CHECK_CAST(obj, pro_note_tab_get_type(), ProNoteTab) 
#define GTK_CPU_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, pro_note_tab_get_type(), ProNoteTabClass) 
#define GTK_IS_CPU(obj) GTK_CHECK_TYPE(obj, pro_note_tab_get_type()) 

typedef struct _ProNoteTab ProNoteTab; 
typedef struct _ProNoteTabClass ProNoteTabClass; 

struct _ProNoteTab 
{ 
    GtkWidget hbox; 
    GtkObject parent_instance; 
    GtkLabel label; 
    GtkButton cbtn; 
}; 

struct _ProNoteTabClass 
{ 
    GtkHBoxClass parent_class; 
}; 

GtkType pro_note_tab_get_type(void); 
GtkWidget* pro_note_tab_new(void); 

G_END_DECLS 

#endif 

notetab.h

今、プログラムは完全に罰金コンパイル:ここでは、コードです。しかし、私は、実行時に取得するエラーは、次のとおりです。

GTK_CRITICAL **:IA__gtk_type_new:アサーションGTK_TYPE_IS_OBJECT(type) failed GTK_CRITICAL **:IA__gtk_container_add:アサーションGTK_IS_WIDGET(widget) failed

は私が間違って何をしているのですか?それとも、世界で何が起こっているのですか? 1については

+0

すべての警告、つまり 'gcc'の' -Wall'オプションでコンパイルを試してください... @Lews Therinによって指摘されている 'if(!pro_note_tab_get_type)'ステートメントで警告を受け取るようになりました。 (pro_note_tab_type) 'なし**を取得してください。また、@unwindが 'static 'に関連して提案したことを考慮してください。 –

+1

' G_DEFINE_TYPE() 'をチェックアウトしたい場合があります。これは上記のコードのほとんどに展開されます。そこに忍び込む – ptomato

+0

@ptomatoありがとう。 – ApprenticeHacker

答えて

1

でなければなりません

+0

最後に、私はいくつかのNULLポインターを変更し、それは動作します!ありがとう – ApprenticeHacker

0

それはstaticする必要がありますように、本当にpro_note_tab_get_type()pro_note_tab_type変数が見えます。ドキュメントによると、問題

if (!pro_note_tab_get_type) 
{ 
+0

まだ修正されていません。 – ApprenticeHacker

0

は、gtk_type_unique「は非推奨となり、新たに書かれたコードでは使用すべきではない」です。

代わりにg_type_register_staticを使用してください。あなたが古いGtk +ではなく、GObjectをマスターしようとしている場合はもっとそうです。

とにかく、あなたのエラーは、あなたが設定しているNULL関数ポインタのいくつかによると思われます。いくつかはおそらくオプションではありませんが、これは文書化されていません。

関連する問題