C 链表结构中的未知类型名称
Unknown type name in C linked list structure
我在头文件中得到了这样的结构:
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 struct S_LIGNE LIGNE;
struct S_LIGNE {
LIGNE *precedent;
PERSONNE individu;
LIGNE *suivant;
};
这样,您的编译器就知道 LIGNE
是 struct S_LIGNE
的类型定义。
我在头文件中得到了这样的结构:
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 struct S_LIGNE LIGNE;
struct S_LIGNE {
LIGNE *precedent;
PERSONNE individu;
LIGNE *suivant;
};
这样,您的编译器就知道 LIGNE
是 struct S_LIGNE
的类型定义。