我試圖創建結構的陣列的陣列,但它出現這種錯誤:聲明結構
「錯誤,數組類型爲不完整元素類型」
typedef struct {
char data[MAX_WORD_SIZE];
int total_count;
Occurrence_t reference[MAX_FILES];
int nfiles;
} Word_t;
struct Word_t array[a];
我試圖創建結構的陣列的陣列,但它出現這種錯誤:聲明結構
「錯誤,數組類型爲不完整元素類型」
typedef struct {
char data[MAX_WORD_SIZE];
int total_count;
Occurrence_t reference[MAX_FILES];
int nfiles;
} Word_t;
struct Word_t array[a];
TL; DR
要麼改變你的結構定義
struct Word_t {
char data[MAX_WORD_SIZE];
int total_count;
Occurrence_t reference[MAX_FILES];
int nfiles;
};
或(而不是兩者),數組聲明:
Word_t array[a];
你做了什麼是定義一個未命名的結構,你所賜給的替代名稱與一個typedef。沒有struct Word_t
,只有一個Word_t
類型定義。
標籤的命名空間(其中,你以後struct
/union
/enum
駐留使用的名字)是從全局命名空間(如文件範圍typedef
編名駐留)分開。許多程序員都覺得在類型名稱周圍拖一個類型名稱很麻煩,你應該總是爲struct name做一個typedef。 Others覺得這是濫用typedef-ing,並且關鍵字傳達了很多意思;對他們來說,typedef是沒有任何真正抽象的語法糖。
無論你選擇寫代碼,堅持它,並不要混淆兩個命名空間。
菜鳥錯誤。謝謝:) –
您首先使用typedef,因此您不應該再編寫結構。看看這裏
typedef struct {
char data[MAX_WORD_SIZE];
int total_count;
Occurrence_t reference[MAX_FILES];
int nfiles;
} Word_t;
Word_t array[a];
它將工作
感謝它的工作。菜鳥錯誤^^ –
您的意思是'Word_t陣列[A];'(不'struct')? – UnholySheep
我建議從「初學者C」中刪除'typedef'。如果長大,他們會放棄它。 :-) – alk
@alk - 小心,這樣的言辭可以開始一場火焰戰爭(從經驗,因爲我分享你的看法:)) – StoryTeller