1

这是堆栈溢出的常见问题,但我的情况很奇怪,我找不到合适的答案,所以我仍然发布它。

这是一个大型项目,但这个问题只包含五个文件: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 的多重定义吗?

谢谢!

4

2 回答 2

0

确保 eclipse 可以看到你所有的 .h 文件。对我来说,它似乎不包括所有相关的 .h 文件。

于 2013-07-04T07:09:48.420 回答
0

对于从 Visual Studio 2013 移植的代码,我在 Eclipse 上遇到了同样的问题。我最好的猜测是编译器无法正确进行多次符号扫描。所以我的最终解决方案是在出现错误的文件中再添加一个声明。对于您的情况,我建议您添加

外部结构 s_foo *foo;

在文件 main.c 中的错误语句之前

于 2015-10-07T00:33:26.880 回答