相互引用的结构

我希望有两个结构可以互相包含。 这是一个例子:

struct a { struct b bb; }; struct b { struct a aa; }; 

但是这段代码没有编译。 gcc说:

 test.c:3: error: field 'bb' has incomplete type 

有没有办法实现这个目标?

那该怎么办? a将包含b ,其中包含a ,其中包含b等…

我想你想用指针代替?

 struct b; struct a { struct b *bb; }; struct b { struct a *aa; }; 

即便如此,编码风格也很糟糕 – 如果可能的话,应该避免循环依赖。

 struct a; struct b; struct a{ struct b *bb; }; struct b{ struct a *aa; }; 

大多数头文件在定义其成员之前声明结构。 结构定义将在其他地方定义。

解决这个问题的常用方法是使它们成为指针然后动态分配它们,甚至只是从另一个结构的静态实例的地址中指定指针。

 struct a { struct b *bb; }; struct b { struct a *aa; }; struct a a0; struct b b0; void f(void) { a0.bb = &b0; b0.aa = &a0; } 

但是,我建议你寻找一个树状结构的组织。 也许两个对象都可以指向常见的第三种类型。

这是荒谬的。

想象一下,如果你说每个X包含一个Y并且每个Y包含一个X ,那么每个X内部都是一个Y ,而Y又包含一个X ,而X又包含一个Y ,而Y又包含一个X无限制

相反,您可以让X包含 Y引用或(或指向 ),反之亦然。