外部变量和结构体定义在其他源文件



有两个具有结构体定义的文件。标题:

typedef struct _InputData InputData;
extern InputData input_data;

和源文件:

struct _InputData{
    char const*modification_l;
    char const*amount_l;
    char const*units_l;
};
InputData input_data = {...};

当我试图从其他源文件中使用input_data时,它给我"无效使用不完整的typedef ' InputData '"。我想我知道为什么会发生这样的事,但是我不知道怎样才能用最得体的方式来处理。

您必须在头文件中定义完整的结构。否则无法知道它有哪些字段,即它是不完整的。

您可以使用这种方法(或多或少),但您需要将结构体定义为指针:

extern struct InputData* input_data;
源文件:

struct InputData{
    char const*modification_l;
    char const*amount_l;
    char const*units_l;
};
InputData* input_data; 
...
input_data = malloc(sizeof(InputData)); 

可以使用指向其他地方定义的struct的指针,但不能使用实例。编译器不知道这个结构是什么,也不知道如何计算这个变量的内存偏移量。

为什么把struct定义放在C文件中?放到页眉

最新更新