2012-11-04 27 views
2
typedef struct{ 
    char name[25]; 
    int yearOfBirth; 
    int district; 
    char gender; 
    int age; 

    CitizenType *next; 

}CitizenType; 

當我嘗試在Visual Studio中以這種格式創建鏈接列表時,我得到各種與語法有關的錯誤。 (總共102個),但是當我註釋掉CitizenType *時;我沒有得到任何錯誤。我意識到它與在完全聲明之前引用結構有關,但我不知道如何解決這個問題。製作一個鏈接列表

回答

0

試試這個:

typedef struct node{ 
    char name[25]; 
    int yearOfBirth; 
    int district; 
    char gender; 
    int age; 

    struct node *next; 

}CitizenType; 

檢查this堆棧溢出的答案更多信息有關C.自我引用結構從答案:

一個CitizenType不能包含另一個CitizenType,因爲它成爲 一個永無止境的遞歸。

希望它有幫助!

+1

它編譯!謝謝!我將不得不做一些閱讀。非常感激。 –

+0

偉大@DaveMcGregor,標記這個答案或你最喜歡的那個答案作爲你問題的'答案'。有關該網站的更多信息,我建議您閱讀[faq](http://stackoverflow.com/faq)。歡迎來到SO! –

+2

@cacho umm ..他指向另一個CitizenType,而不是創建一個永無止境的遞歸..我認爲他原來的代碼不起作用的原因是typedef應該在實際使用之前出現。通過將其替換爲struct node *,您只是在定義之前不使用typedef。我認爲你的回答有點誤導。 – Neo

4

在結構之前(和分開)聲明typedef。

typedef struct citizen_type CitizenType; 

struct citizen_type { 
    ... 
    CitizenType *next; 
}; 
1

問題是

CitizenType 

進入的類型的命名空間的結構結束之後。

因此,只有在聲明後才能使用新類型。

您可以使用它代替struct name(給出結構的名稱),或者在使用名稱聲明結構之前聲明類型,如前一篇文章中所述。