【问题标题】:Error: Conflicting types in structs pointers错误:结构指针中的类型冲突
【发布时间】:2018-03-20 11:04:45
【问题描述】:

我正在尝试将固定结构转换为动态结构,但出现下一个错误:warning: data definition has no type or storage classwarning: type defaults to 'int' in declaration of '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

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

谢谢。

【问题讨论】:

  • 为什么您的main.c 包含另一个C 文件?你应该只包含头文件
  • 现在是学习如何使用 Makefile 的好时机。你应该用minimal reproducible example 扩展你的问题,因为它目前缺乏足够的信息
  • 你的问题是关于一个C程序的,那你为什么要在这里用JavaScript呢??
  • MCVE 表示最小、完整、可验证的示例。把你的程序带上问题,去掉所有不需要的东西来显示问题。保留编译所需的一切。 => MCVE。与 JSLint 的任何“页面”或 JavaScript 或其他任何东西都没有关系。
  • @JuMoGar 不,您的代码不是minimal reproducible example。它是最小的,但不完整。

标签: c struct malloc dynamic-memory-allocation


【解决方案1】:

两个问题:

  1. struct cliente *放在clientes前面applicationVariables.c。你已经声明了clientes,但是你还没有定义它,所以目前你还没有为clientes分配空间,你不能分配它。

  2. 现在,clientes 将在全局范围内定义,超出任何运行时上下文,因此您不能使用 运行时函数malloc 来初始化它。要么使用常量初始化器定义它,要么将其移动到 main() 或任何其他函数中。

【讨论】:

  • 那么,你有另一个错误,但你当前的错误是这个。另外,将clientes 的定义放在一个函数中......看起来你会将一个非常量值分配给一个全局范围变量
  • 我在这里添加了一些 cmets 以使其完整。
  • 我已经尝试了这两种方法:- 第 1 点:已经这样做了,我收到此错误:error: initializer element is not constant。 - 第 2 点:所以...我不能在作用域上初始化这个 var (*clientes)?强制必须在函数内部?感谢您的帮助。
  • 好吧,要让函数在main 之前运行,您可以将其声明为构造函数。在 C 中没有显式构造函数,但是 gcc 提供了__attribute__((constructor)),您可以使用它来获得相同的最终结果
猜你喜欢
  • 1970-01-01
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
相关资源
最近更新 更多