C - 错误:数组类型在extern结构声明中具有不完整的元素类型

时间:2018-03-08 20:49:37

标签: c struct extern

我有下一个代码:

// FILE: HEADERS.h
extern struct viaje viajes[];
extern struct cliente clientes[];

// FILE: STRUCTS.c
struct viaje {
    char identificador[30+1];
    char ciudadDestino[30+1];
    char hotel[30+1];
    int numeroNoches;
    char tipoTransporte[30+1];
    float precioAlojamiento;
    float precioDesplazamiento;
};

struct cliente {
    char dni[30+1];
    char nombre[30+1];
    char apellidos[30+1];
    char direccion[30+1];
    int totalViajes;
    struct viaje viajes[50];
} clientes[20];

当我尝试编译代码时,我得到下一个错误:error: array type has incomplete element type in a extern struct declaration我不知道为什么会这样。我已经尝试过在Structs定义之后包含头文件并且我没有得到任何错误,但是它是错误的,正确的方法是定义 - >声明,而不是声明 - >定义

为什么会这样?谢谢。

1 个答案:

答案 0 :(得分:2)

如果定义或声明结构的实例,则需要首先定义该结构。否则,编译器无法确定结构的大小或其成员的大小。

您需要在extern声明之前将结构定义放在头文件中:

struct viaje {
    char identificador[30+1];
    char ciudadDestino[30+1];
    char hotel[30+1];
    int numeroNoches;
    char tipoTransporte[30+1];
    float precioAlojamiento;
    float precioDesplazamiento;
};

struct cliente {
    char dni[30+1];
    char nombre[30+1];
    char apellidos[30+1];
    char direccion[30+1];
    int totalViajes;
    struct viaje viajes[50];
};   // note that there are no instances defined here

extern struct viaje viajes[];
extern struct cliente clientes[];

然后您的.c文件将包含实例:

// Changed size viajes from 20 to 50
struct viaje viajes[50];
struct cliente clientes[20];