[英]Unknown type name in C linked list structure
我在 header 文件中得到了這樣的結構:
typedef struct {
LIGNE *precedent;
PERSONNE individu;
LIGNE *suivant;
} LIGNE;
但是當我編譯時,我得到了這個錯誤:
error: unknown type name ‘LIGNE’
LIGNE *precedent;
^~~~~
error: unknown type name ‘LIGNE’
LIGNE *suivant;
我不明白問題出在哪里。
把自己放在編譯器的鞋子里:
1: typedef struct {
2: LIGNE *precedent;
3: PERSONNE individu;
4: LIGNE *suivant;
5: } LIGNE;
在第 2 行中,您說您想要一個指向LIGNE
類型的指針。 這對編譯器來說是個問題,因為直到第 5 行它才知道LIGNE
是什么。當然,這是編譯器有點笨。 指向任何東西的指針大小相同,因此就結構布局而言,這無關緊要。 但是,C 編譯器想知道這是什么類型的指針。 正如@Gerhardh 所建議的那樣,您可以通過在第 2 行和第 4 行前加上struct
來欺騙它。 編譯器看到這一點並將其作為指向結構的指針讀取,突然不再關心它對它一無所知。
這將起作用
typedef struct {
struct LIGNE *precedent;
PERSONNE individu;
struct LIGNE *suivant;
} LIGNE;
正如評論和Tomo Ceferin的回答中所說,您的編譯器直到第 5 行才知道LIGNE
是什么。
一種解決方案是在聲明之前對您的結構進行 typedef:
typedef struct S_LIGNE LIGNE;
struct S_LIGNE {
LIGNE *precedent;
PERSONNE individu;
LIGNE *suivant;
};
這樣,您的編譯器就知道LIGNE
是struct S_LIGNE
的 typedef。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.