我必须创建一个人与每个人都应该有一台冰箱。 这是做的最好的方法是什么? 如果是这样我究竟做错了什么? 提前致谢。
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;
这给了我下面的错误:
错误:字段“冰箱具有不完整的类型
struct FRIDGE
的东西不同于FRIDGE
。
您需要使用两种类型的FRIDGE
在你的其他结构。
typedef struct {
int age;
FRIDGE fridge;
} PERSON;
或定义你的冰箱的struct FRIDGE
struct FRIDGE {
int number;
};
此外,结构可能要定义你使用它(例如,上面的人)了。
你必须使用成员FRIDGE
,清除所有警告和错误之后。 声明FRIDGE
前PERSON
me.fridge.number = 1
编辑 :我发现的bug。 您正在使用匿名结构,所以你不应该用struct
关键字,但使用typedef
版名称。
改变struct FRIDGE fridge
对FRIDGE fridge
无论是做的向前声明struct FRIDGE;
要么,
给出的定义FRIDGE
的结构使用它之前PERSON
使用与结构的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