繁体   English   中英

相互引用的结构

[英]Structs that refer to each other

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

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引用或(或指向 ),反之亦然。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM