c - 错误: Conflicting types in structs pointers

标签 c struct malloc dynamic-memory-allocation

我正在尝试将固定结构转换为动态结构,但出现下一个错误:警告:数据定义没有类型或存储类警告:类型默认为“int” “clientes”声明 [-Wimplicit-int]。我将展示我的项目:

文件variablesPrototypes.h

struct viaje {
    char identificador[MAX_TAM_IDENTIFICADOR+3];
    char ciudadDestino[MAX_TAM_CIUDAD_DESTINO+3];
    char hotel[MAX_TAM_HOTEL+3];
    int numeroNoches;
    char tipoTransporte[MAX_TAM_TIPO_TRANSPORTE+3];
    float precioAlojamiento;
    float precioDesplazamiento;
};

struct cliente {
    char dni[MAX_TAM_DNI+3];
    char nombre[MAX_TAM_NOMBRE+3];
    char apellidos[MAX_TAM_APELLIDOS+3];
    char direccion[MAX_TAM_DIRECCION+3];
    int totalViajes;
    struct viaje viajes[MAX_TAM_VIAJES_CLIENTE];
};

extern struct cliente *clientes;

文件applicationVariables.c

clientes = (struct cliente *)malloc(sizeof(struct cliente)*1);

在我的 main.c 中,首先包含 variablesPrototypes.h,然后包含 applicationVariables.c

为什么会这样?我已经测试了很长时间但没有解决问题。有什么想法吗?

谢谢。

最佳答案

两个问题:

  1. struct cliente * 放在 applicationVariables.c 中的 clientes 前面。您已声明 clientes,但尚未定义它,因此,目前您尚未为 clientes 分配空间,因此无法分配它。

  2. 就像现在一样,clientes 将在全局范围内定义,不受任何运行时上下文的影响,因此您不能使用运行时像malloc这样的函数来初始化它。您可以使用常量初始值设定项定义它,也可以将其移动到 main() 或任何其他函数中。

关于c - 错误: Conflicting types in structs pointers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49382559/

相关文章:

c# - 一元加号运算符有什么作用?

c - C语言169算法

c - For循环忽略第一行,在C中第一次循环执行后

c - 用 strtok() 分割字符串会出错

c - 全局变量和静态变量在 C 中如何协同工作?

c - 我正在尝试合并两个数组并按降序对其进行排序

c - 在 C 代码中通过引用将结构传递给函数(编译错误)

c++ - C++重载运算符<用于结构:错误的参数太多

c - 如何释放将返回的 char*?

c - 依次调用malloc和free函数是否会产生内存碎片?