2017-05-07 108 views
0

我試圖創建結構的陣列的陣列,但它出現這種錯誤:聲明結構

「錯誤,數組類型爲不完整元素類型」

typedef struct { 
char data[MAX_WORD_SIZE];  
int total_count;  
Occurrence_t reference[MAX_FILES];  
int nfiles;   
} Word_t; 

struct Word_t array[a]; 
+3

您的意思是'Word_t陣列[A];'(不'struct')? – UnholySheep

+1

我建議從「初學者C」中刪除'typedef'。如果長大,他們會放棄它。 :-) – alk

+0

@alk - 小心,這樣的言辭可以開始一場火焰戰爭(從經驗,因爲我分享你的看法:)) – StoryTeller

回答

3

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是沒有任何真正抽象的語法糖。

無論你選擇寫代碼,堅持它,並不要混淆兩個命名空間。

+0

菜鳥錯誤。謝謝:) –

0

您首先使用typedef,因此您不應該再編寫結構。看看這裏

typedef struct { 
    char data[MAX_WORD_SIZE];  
    int total_count;  
    Occurrence_t reference[MAX_FILES];  
    int nfiles;   
} Word_t; 
Word_t array[a]; 

它將工作

+0

感謝它的工作。菜鳥錯誤^^ –