我必须创建一个人,每个人都应该有一个冰箱。这是最好的方法吗?如果是这样,我做错了什么?提前致谢。
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;
这给了我以下错误:
错误:字段“冰箱”的类型不完整
我必须创建一个人,每个人都应该有一个冰箱。这是最好的方法吗?如果是这样,我做错了什么?提前致谢。
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
编辑:我发现了这个错误。您正在使用匿名结构,因此您不应使用struct
关键字,而应使用typedef
ed 名称。
更改struct FRIDGE fridge
为FRIDGE fridge
要么做前向声明struct FRIDGE;
或者,
FRIDGE
在struct中使用它之前给出定义PERSON
在你的结构中使用 typedef 会让你陷入这种纠结。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 会令人困惑和糟糕。