C语言实现互相引用的不相交集合(Disjoint Set)结构问题求助
解决C语言结构体互相引用的编译问题
你的问题核心是两个结构体互相引用时,编译器无法识别未提前声明的类型,只需通过结构体前置声明调整代码顺序即可解决,具体修正如下:
正确代码示例
// 先前置声明两个结构体标签,让编译器知道这两个类型存在 struct set; struct liste_set; // 为结构体创建类型别名,方便后续使用 typedef struct set set; typedef struct liste_set liste_set; // 定义liste_set结构体,此时set类型已被声明,指针合法 struct liste_set { set *head; set *tail; }; // 定义set结构体,此时liste_set类型也已声明,指针合法 struct set { int value; liste_set *liste; set *next; };
原理说明
- C语言中,使用结构体指针时,不需要知道结构体的完整定义,只需提前声明该结构体类型(前置声明)即可,因为指针的内存大小是固定的,编译器可以直接处理。
- 你的原代码顺序错误:定义
liste_set时,set类型还未被声明,编译器无法识别set*,所以报错。调整顺序后,两个类型都提前完成声明,互相引用的指针就能被正确识别。
内容的提问来源于stack exchange,提问作者Stack Realtek
相关产品推荐
相关产品推荐

