我必须创建一个人,每个人都应该有一个冰箱。这是最好的方式吗?如果是这样,我做错了什么?提前谢谢。
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;
这给了我以下错误:
错误:字段'冰箱'的类型不完整
答案 0 :(得分:19)
struct FRIDGE
与FRIDGE
不同。
您需要在其他结构中使用FRIDGE
类型。
typedef struct {
int age;
FRIDGE fridge;
} PERSON;
或将冰箱定义为struct FRIDGE
struct FRIDGE {
int number;
};
此外,可能必须在使用之前定义结构(例如,在人的上方)。
答案 1 :(得分:3)
删除所有警告和错误后,您必须使用FRIDGE
的成员。在FRIDGE
PERSON
me.fridge.number = 1
已编辑:我发现了这个错误。您使用的是匿名结构,因此不应使用struct
关键字,而应使用typedef
ed名称。
更改struct FRIDGE fridge
到FRIDGE fridge
答案 2 :(得分:1)
要么struct FRIDGE;
或者,
在结构FRIDGE
PERSON
的定义
答案 3 :(得分:0)
将typedef与结构一起使用将使您陷入这种纠结。 struct标签标识符前面的struct关键字是应该使用struct的方式,这也更加明确和易于阅读。
这里有一篇长而良好的博客文章,其中包含所有详细信息 https://www.microforum.cc/blogs/entry/21-how-to-struct-lessons-on-structures-in-c/
但是简而言之,您真正想要做的就是省去像这样的typedef
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;
Linus Torvalds也进行了一次,这是非常扎实的理由,为什么在所有结构上使用typedef会令人困惑和糟糕。