内部结构结构(Struct inside struct)

2019-07-17 14:27发布

我必须创建一个人与每个人都应该有一台冰箱。 这是做的最好的方法是什么? 如果是这样我究竟做错了什么? 提前致谢。

typedef struct {
 int age;
 struct FRIDGE fridge;
} PERSON;

typedef struct {
 int number;
} FRIDGE;

FRIDGE fr;
fr.number=1;

PERSON me;
me.name=1;
me.fridge = fr;

这给了我下面的错误:

错误:字段“冰箱具有不完整的类型

Answer 1:

struct FRIDGE的东西不同于FRIDGE

您需要使用两种类型的FRIDGE在你的其他结构。

typedef struct {
 int age;
 FRIDGE fridge;
} PERSON;

或定义你的冰箱的struct FRIDGE

struct FRIDGE {
 int number;
};

此外,结构可能要定义你使用它(例如,上面的人)了。



Answer 2:

你必须使用成员FRIDGE ,清除所有警告和错误之后。 声明FRIDGEPERSON

me.fridge.number = 1

编辑 :我发现的bug。 您正在使用匿名结构,所以你不应该用struct关键字,但使用typedef版名称。

改变struct FRIDGE fridgeFRIDGE fridge



Answer 3:

无论是做的向前声明struct FRIDGE;

要么,

给出的定义FRIDGE的结构使用它之前PERSON



Answer 4:

使用与结构的typedef将让你陷入这种纠结的。 在一个struct标签标识的前struct关键字是结构应该如何使用,这也更加明确,更容易阅读。

有一个长期和良好的博客文章在这里所有的细节https://www.microforum.cc/blogs/entry/21-how-to-struct-lessons-on-structures-in-c/

但在短期你真正想要做的是离开了类型定义是这样的

struct FRIDGE;  // This is a forward declaration, now an incomplete type

struct PERSON{
 int age;
 struct FRIDGE fridge;
};

struct FRIDGE{
 int number;
};

struct FRIDGE fr;
fr.number=1;

struct PERSON me;
me.name=1;
me.fridge = fr;

为什么使用的typedef在您所有的结构是混乱和糟糕的Linus Torvalds的也去上这个曾经,非常坚实的理由。

https://yarchive.net/comp/linux/typedefs.html



文章来源: Struct inside struct