这是一个关于堆栈溢出的常见问题,但我的情况很奇怪,我找不到合适的答案,所以我仍然发布它。
这是一个大型项目,但此问题只包含五个文件:types.h,glob.h,test.c,test.h和main.c
types.h 中的说我定义了一个结构:
struct s_foo {
int a;
};
在 glob.h 中
struct s_foo *foo;
test.h 中的
#ifndef GLOB_H
#define GLOB_H
extern struct s_foo *foo;
#endif
test.c 中的
#include "types.h"
#include "test.h"
struct s_foo *foo = NULL;
main.c 中的
#include "types.h"
#include "test.h"
...
foo = (struct s_foo *)malloc(sizeof(struct s_foo));
该程序可以通过gcc编译并运行正常,但是eclipse在main.c中给了我这个令人讨厌的错误,符号'foo'无法解析。
任何人都可以告诉我为什么eclipse会给我这个错误?这是因为变量foo的多个定义吗?
谢谢!
答案 0 :(得分:0)
确保eclipse可以看到你所有的.h文件。对我来说似乎它不包括所有相关的.h文件。
答案 1 :(得分:0)
对于从Visual Studio 2013移植的代码,我在Eclipse上遇到了同样的问题。我最好的猜测是编译器无法进行多次符号扫描。所以我的最终解决方案是在出现错误的文件中再添加一个声明。对于您的情况,我建议您添加
extern struct s_foo * foo;
在文件main.c中的错误语句之前