【问题标题】:结构的冲突类型
【发布时间】: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


【解决方案1】:

您首先需要声明名称 Driver,然后才能在函数声明中使用它

typedef struct{
    char name[20];
    char surname[20];
    int carNumber;
    bool rookie;
}Driver;

void fillDrivers(Driver[]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    相关资源
    最近更新 更多