C语言定义包含自身指针的struct Node时出现unknown type name错误是什么原因?
报错原因
C语言中typedef定义的别名生效时机晚于结构体内部成员的解析阶段:
你写的typedef struct Node {...} Node;语句执行分为两步:
- 编译器首先解析
struct Node的结构定义,此时typedef还没有执行完成,别名Node尚未被编译器注册,因此结构体内部直接使用Node声明成员会被识别为未知类型。 - 只有当整个结构体定义完成、
typedef语句整体执行结束后,Node才会作为struct Node的别名生效。
你认为「结构体内部可以使用自身类型」的结论是成立的,但需要使用已经注册的结构体标签名:struct Node在你写下struct Node{的那一刻就已经被编译器识别为不完全结构体类型,完全可以用来声明指针类型的成员。
修复方案
两种常用写法都可以解决问题:
方案1:结构体内部使用结构体标签声明成员
typedef struct Node{ struct Node *children[10]; }Node;
方案2:提前声明typedef别名
// 提前给不完全结构体注册别名 typedef struct Node Node; // 再完成结构体的完整定义 struct Node { Node *children[10]; };
内容的提问来源于stack exchange,提问作者user1003967
相关产品推荐
相关产品推荐

