我有3个文件:main.c
,def.c
,def.h
。两个.c
文件都包括def.h
。所有文件都在同一目录中。我的编译器是gcc版本4.9.2。
在def.h中:
struct _info {
int a;
};
在def.c中:
#include "def.h"
struct _info info[] = {};
在main.c:
#include "def.h"
extern struct _info info[];
当我将def.c
构建为目标文件,然后使用main.c
构建时:
gcc -c def.c
gcc main.c def.o
我收到一条错误消息:数组类型具有不完整的元素类型
如果我使用typedef
将struct _info
定义为INFO
,如:
typedef struct _info INFO;
并在struct _info
文件中用INFO
替换.c
。然后编译确定。
但是为什么和typedef
做什么?
谢谢大家的帮助。这个问题最终导致main.c
拼写错误。就像是:
extern struct _infoo info[];
当typedef
取代它们时,一切都工作正常。