2012-03-04 14 views
0

私は本当に理解できない問題に遭遇しています。
私は自分のCコードに一連のアイコンを直接 "インクルード"したいと思います。ツールgdk-pixbuf-csource(--structオプション付きで)を使用して、各イメージの 'const' pixdata構造を初期化するファイルを作成しました。 符号化された画像の例がこれです:constをコンパイルするGdkPixdata: "エラー:初期化要素が一定ではありません"

const GdkPixdata pixdata_flipH = { 
    0x47646b50, /* Pixbuf magic: 'GdkP' */ 
    24 + 479, /* header length + pixel_data length */ 
    0x2010002, /* pixdata_type */ 
    64, /* rowstride */ 
    16, /* width */ 
    16, /* height */ 
    /* pixel_data: */ 
    "\257\0\0\0\0\1\0\0\0\1\203\0\0\0\0\2\0\0\0\2\40J\207E\202\40J\207\377" 
    "\202\0\0\0\0\202\40J\207\377\2\40J\207E\40J\207\2\202\0\0\0\0\1\0\0\0" 
    "\2\203\0\0\0\0\4\40J\2072\40J\207\377\276\322\352\377\40J\207\377\202" 
    <data continues......> 
    "\0\0\0\0\1\40J\207\1\204\0\0\0\0\1\40J\207\3\227\0\0\0\0\1\0\0\0\3\244" 
}; 

私はいくつかのボタンのアイコンを含めたいので、私は以下の一連のステートメント準備:私は追加します。このように

GtkWidget *icon_flipH = gtk_image_new_from_pixbuf(gdk_pixbuf_from_pixdata(&pixdata_flipH, FALSE, NULL)); 
GtkWidget *icon_flipV = gtk_image_new_from_pixbuf(gdk_pixbuf_from_pixdata(&pixdata_flipV, FALSE, NULL)); 
// and so on... 

を機能を持つボタンの画像:

gtk_button_set_image(GTK_BUTTON(button_flipH), icon_flipH); 

うーん... GCCコンパイラはgdk_を含む各ラインで「初期化子要素が定数ではありません」というエラーになりますpixbuf_from_pixdata()関数。私はなぜ関数がconst構造体ポインタを必要とし、実際には私の構造体が 'const'と宣言されているのかを理解できません。

何か忘れていますか?イメージをコードに組み込み、pixbufsを作成するのは正しい方法ではありませんか?この場合のチュートリアルは何ですか? (icon_flipHのような)ファイルスコープで定義された

+1

グローバル変数を関数呼び出しの結果で初期化しようとしていますか?それはうまくいかないでしょう。 –

+2

Carlさん、ありがとう、私は間違いを犯しました。 @Kerrek SB:私は実際に質問を投稿した学生なので、実際に職業を切り替える必要はありません。 – TheUnexpected

答えて

2

オブジェクトは静的記憶域期間を持つ:彼らの寿命は、プログラムの寿命であり、彼らはプログラムの起動前に初期化されています。スタティックな保存期間を持つオブジェクトは、定数式(例:010 + 32、またはsizeof (int))でのみ初期化できます。関数呼び出しの結果は定数式ではありません。

// File scope 

GtkWidget *icon_flipH = NULL; // OK, NULL is a constant expression 
GtkWidget *icon_flipV = foo(); // Not OK, foo is not a constant expression 
関連する問題