相互引用的结构
我希望有两个结构可以互相包含。 这是一个例子:
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
的引用或(或指向 ),反之亦然。