我必须创建一个人与每个人都应该有一台冰箱。这是做的最好的方法是什么?如果是这样我究竟做错了什么?提前致谢。
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
ed名。
更改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的也去上这个曾经,非常坚实的理由。