簡體   English   中英

C 鏈表結構中的未知類型名稱

[英]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;
};

這樣,您的編譯器就知道LIGNEstruct S_LIGNE的 typedef。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM