内部结构结构

问题描述 投票:10回答:4

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

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;

这给了我下面的错误:

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

c struct compiler-errors typedef
4个回答
19
投票

struct FRIDGE是东西比FRIDGE不同。

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

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

或定义你的冰箱为struct FRIDGE

struct FRIDGE {
 int number;
};

此外,该结构可以具有被定义使用它(例如上面的人)之前。


3
投票

你必须使用FRIDGE的成员,删除所有警告和错误之后。 FRIDGE之前声明PERSON

me.fridge.number = 1

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

更改struct FRIDGE fridgeFRIDGE fridge


1
投票

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

要么,

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


0
投票

使用与结构的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

© www.soinside.com 2019 - 2024. All rights reserved.