【发布时间】:2018-12-29 19:16:25
【问题描述】:
我正在尝试转发声明 typedef structwheels。
typedef struct wheels wheels;
typedef struct car {
float topSpeed;
wheels w;
} car;
typedef struct wheels {
int frontWheels;
int backWheels;
} wheels;
int main() {
car c = {
.topSpeed = 255.0,
.w = {
.frontWheels = 2,
.backWheels = 2,
}
};
return 0;
}
这给了我以下错误:
错误:字段“w”的类型轮w不完整;
错误:字段名称不在记录或联合初始化程序中 .frontWheels = 2
错误:字段名称不在记录或联合初始化程序中 .backWheels = 2
我知道我可以将整个 typedef struct 轮子移到 typedef struct car 上方,这样就可以了。
如何正确转发声明结构轮?
【问题讨论】:
-
对于结构object的变量的定义,你需要结构的完整定义(因为编译器需要知道它的大小)。前向声明对于结构的指针非常有用,因为编译器只需要知道指针的大小而不是整个结构。
-
您可以前向声明结构,但不能使用前向声明的结构来声明变量(或其他结构成员)。为什么需要前向声明它?似乎没有必要。
-
而在这种情况下,为什么
struct wheels的定义不能在struct car之前呢?wheels结构不依赖于car,因此可以轻松移动。 -
对于这种特定情况,移动并没有什么不同。我想知道在 C 中是否有可能有这样的前向声明。
标签: c struct typedef forward-declaration