相互引用的结构

时间:2010-12-09 01:34:26

标签: c gcc

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

struct a {
  struct b bb;
};

struct b {
  struct a aa;
};

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

test.c:3: error: field ‘bb’ has incomplete type

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

4 个答案:

答案 0 :(得分:26)

这应该如何运作? a将包含b,其中包含a,其中包含b等等。

我想你想用指针代替?

struct b;

struct a {
  struct b *bb;
};

struct b {
  struct a *aa;
};

即使这样的编码风格很糟糕 - 如果可能的话,应该避免使用循环依赖。

答案 1 :(得分:7)

struct a;
struct b;

struct a{
   struct b *bb;
};

struct b{
   struct a *aa;
};

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

答案 2 :(得分:2)

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

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;
}
但是,我建议您寻找一个树状结构的组织。也许两个对象都可以指向常见的第三种类型。

答案 3 :(得分:0)

这是荒谬的。

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

相反,您可以让{{1}}包含对的引用或(或指向的指针){{1}},反之亦然。< / p>