ページ 11

C++ 構造体について

Posted: 2014年7月20日(日) 22:43
by 棒人間
C++, Dxlib.h, VisualStudio2010, Win7を使ってプログラムを作成しています。

メニュー画面の項目を構造体で作っているのですが、エラー一覧に「不完全な型は使用できません」と表示され、エラーが解決できません。

char ○○○[];が一つだと問題ないのですが、以下のように2つ書くとエラーが出ます。
エラーはchar MenuItem[];(構造体内の1行目)で起こっているようです。

<code>
typedef struct StartMenu{
char MenuItem[]; //メニュー項目名
char MenuItemDescription[]; //メニュー項目説明
}StartMenu;
</code>

C言語の知識は大学である程度学んでいるのですが、なぜエラーが出ているのかわかりませんでした。
なぜエラーが出ているのか、解決方法はあるのかが知りたいです。

質問方法を見て書きましましたが、不足があればそのご指摘の方もお願いしたします。
どうかご回答の方よろしくお願いいたします。

Re: C++ 構造体について

Posted: 2014年7月20日(日) 22:52
by みけCAT
理由はよくわからないですが、char hoge[]を構造体の最後以外で定義してはいけないらしいです。
https://ideone.com/mFh0SU

素直にポインタ宣言子を使うのがいいと思います。

コード:

typedef struct StartMenu{
	char *MenuItem; //メニュー項目名
	char *MenuItemDescription; //メニュー項目説明
}StartMenu;

Re: C++ 構造体について

Posted: 2014年7月20日(日) 22:57
by h2so5
C99の構造体はサイズを指定しない配列(flexible array member)を最後のメンバに一つだけ持つことができます。
サイズを指定しない配列を二つ以上持っているとこれに違反するのでエラーとなります。

Re: C++ 構造体について

Posted: 2014年7月20日(日) 23:11
by 棒人間
伝説なるハッカー様、比類なきプログラマー様、
ご回答の方ありがとうございます。

サイズ指定なしの配列を2つ以上持ってはいけないというとだったのですね。
解決方法はNo2の方のものを参考にさせていただきます。

貴重なお時間をいただき、ありがとうございました。