我的代码看起来像这样
struct {
int valid;
int pid;
int heading;
int speed;
} car;
struct car road[10]; //a road filled with cars
然而,我的编译器抱怨:
“不完整的struct / union / enum car:road”
我做错了什么?我在网上看了一些例子,他们表明这是如何初始化结构数组。
如果不明显,我正在尝试制作汽车结构阵列
答案 0 :(得分:3)
更改:
struct {
int valid;
int pid;
int heading;
int speed;
} car;
声明 只有 未命名结构的 ,名称为car
,致:
struct car{
int valid;
int pid;
int heading;
int speed;
};
声明了新类型struct car
。struct
的名称必须位于关键字struct
的旁边。
你也可以这样做:
typedef struct {
int valid;
int pid;
int heading;
int speed;
} car;
然后您只将此struct
称为car
,而不是struct car
。
有关structs
及其语法的详细信息,请参阅this link。
答案 1 :(得分:1)
此:
struct {
...
} car;
声明一个名为car
的匿名结构的单个实例。除了使用新类型外,您可以将struct {... }
部分视为与任何其他类型名称类似。由于您没有为结构指定名称,因此您不能创建超过car
实例。
这似乎是一件毫无意义的事情,但是当你想要把事情分组在一起时它真的很有用。
你的意思是:
struct car {
...
};
声明一个名为struct car
的新结构类型。您可以使用此名称来引用声明,例如稍后像你一样创建一堆实例:
struct car road[10];
答案 2 :(得分:1)
选项1(没有typedef):
FILE
选项2(带有未命名结构的typedef):
struct car {
int valid;
int pid;
int heading;
int speed;
};
struct car road[10];
选项3(带有命名结构的typedef):
typedef struct {
int valid;
int pid;
int heading;
int speed;
} car_t;
car_t road[10];
错误对结构使用typedef ...