有两个具有结构体定义的文件。标题:
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文件中?放到页眉