2017-01-14 48 views
-2

下面是我的頭文件trie.h的代碼。 編譯器不斷顯示以下錯誤:重新定義結構

In file included from speller.c:11: 
./trie.h:3:8: error: redefinition of 'letter' 
struct letter 
    ^
./trie.h:3:8: note: previous definition is here 
struct letter 
    ^
1 error generated. 
make: *** [speller.o] Error 1 

代碼:

struct letter 
{ 
    int is_word; 
    struct letter* arr[27]; 
}; 


// fuctions 
struct letter* create_trie(); 
void free_trie(struct letter* trie); 
+2

您的標題包含警衛嗎? – DeiDei

回答

2

最有可能你的文件被列入多次,因此重新定義錯誤。 爲了避免這個問題,使用include guards

#ifndef HEADERNAME_DEFINED 
#define HEADERNAME_DEFINED 

// your code goes here. 

#endif // HEADERNAME_DEFINED 

,或者您可以使用非標準的預處理指令一樣#pragma once做的工作。它會減少代碼,有時編譯速度更快。
把那你的文件的頂部:

#pragma once 

// your code goes here 

注:#endif後的評論(// HEADERNAME_DEFINED部分)是沒有必要的。這只是程序員知道共同屬於什麼的暗示。

+0

謝謝。多重包容是我的問題。 – marpangal

+0

@ArpanMangal很高興它解決了你的問題。如果是這樣,您可以將答案標記爲已接受。 – Quest