相互引用的结构

sjf*_*sjf 19 c gcc

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

struct a {
  struct b bb;
};

struct b {
  struct a aa;
};
Run Code Online (Sandbox Code Playgroud)

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

test.c:3: error: field ‘bb’ has incomplete type
Run Code Online (Sandbox Code Playgroud)

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

Ebo*_*ike 26

这应该怎么样?a将包含b,将包含a,将包含b,等...

我想你想用指针代替?

struct b;

struct a {
  struct b *bb;
};

struct b {
  struct a *aa;
};
Run Code Online (Sandbox Code Playgroud)

即便如此,编码风格也不好 - 如果可能的话,应该避免循环依赖.

  • 我认为这不一定是糟糕的风格 - 毕竟,一个简单的链表`struct`将包含一个指向自身的指针,它更加循环. (13认同)
  • 好的,让我在这里尝试一个类比.你把一个盒子放进一个桶里,然后把桶放进盒子里.想象一下. (9认同)
  • @sjf - 转到绘图板,看看你的结构应该是什么样子.'b'基本上包含一个`a`,但是`a`包含一个`b`.你期望在记忆中结束什么?你想要实现什么目标? (5认同)
  • @detly:我指的是循环依赖,即两个依赖于彼此或彼此指向的类.http://en.wikipedia.org/wiki/Circular_dependency (2认同)

Mut*_*man 7

struct a;
struct b;

struct a{
   struct b *bb;
};

struct b{
   struct a *aa;
};
Run Code Online (Sandbox Code Playgroud)

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