【发布时间】:2022-01-20 11:11:07
【问题描述】:
我有一个作业,其中我有一个无法修改的代码库,并且我必须创建一个必须用函数填充的结构。 这是代码,其中函数fillDrivers()来自代码库,结构是我制作的。
#include <string.h>
#include <stdbool.h>
void fillDrivers(Driver[]);
typedef struct{
char name[20];
char surname[20];
int carNumber;
bool rookie;
}Driver;
int main(void)
{
return 0;
}
void fillDrivers(Driver arrayDrivers[]) {
int i = 0;
// Lewis Hamilton
strcpy(arrayDrivers[i].name, "Lewis");
strcpy(arrayDrivers[i].surname, "Hamilton");
arrayDrivers[i].carNumber = 44;
arrayDrivers[i].rookie = false;
i++;
}
原始代码库包含网格中的所有驱动程序,我只留下第一个以减小大小。 问题是这段代码给了我这个错误:Conflicting types for 'fillDrivers' 在第 19 行。 如果在结构中我在驱动程序处添加方括号,我会收到此错误: 数组有不完整的元素类型'Driver'(又名'struct(未命名的结构在C:\Users\paual\Desktop\Uni\Programmazione\Homeworks\Homework_3nuovo\main.c:7:9)[]'),第 19 行也是如此。
我该怎么办?
【问题讨论】:
-
将函数原型移动到结构定义之后。
-
或者在函数之前声明结构体并命名结构体。 (例如
struct driver; void fillDriver(struct driver *); typedef struct driver { } Driver;)。或者,最重要的是,完全放弃愚蠢的 typedef。 typedef 对于澄清函数指针定义和其他一些事情很有用;这不是对 typedef 的适当使用。 -
C 文件一般是从上到下解析的,就像看书一样。如果读者(编译器)遇到以前没有读过的东西,就会感到困惑。
标签: c struct declaration typedef function-declaration