1

私はstringtableと呼んでいる構造体で始まるacファイルを持っています、このように見えます

struct stringtable {
   int table[];
   int numElements = 15;
};

そして、このtypedefを持つヘッダーがあります

typedef stringtable *stringtable_ref;

gcc でコンパイルすると、次のエラーが表示されます。expected identifier or '(' before '[' token expected ':' before 'int'

構造体が間違っていると宣言したように。私は以前にこのように C で構造体を作成したことがあるので、質問は次のとおりです。構造体の宣言を間違えていますか? セミコロンの前にタグが必要ですか? 構造体を宣言できるのは特定の場所だけですか?

4

3 に答える 3

1
struct stringtable {
   int table[];
   int numElements = 15;
};

のような柔軟な配列メンバーは、の最後のメンバーにint table[];しかなれません(少なくとももう1つのメンバーがあります)。struct

また、宣言のメンバーにデフォルト値を割り当てることはできませんstruct。Cはそれをサポートしていません。

于 2012-10-02T20:06:14.367 に答える
1

構造体にメンバーがない限りstatic、宣言時にメンバーを初期化することはできません。

メンバーを初期化する前に、構造体のインスタンスを作成する必要があります。

 struct stringtable str_table;
 str_table.numElements = 15; 
 //etc
于 2012-10-02T20:06:20.093 に答える
0

ヘッダーにも必要だと思いますtypedef struct stringtable *stringtable_ref

于 2012-10-02T20:13:41.990 に答える