【发布时间】:2013-07-04 06:32:38
【问题描述】:
这是堆栈溢出的常见问题,但我的情况很奇怪,我找不到合适的答案,所以我仍然发布它。
这是一个大型项目,但这个问题只包含五个文件: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的多重定义吗?
谢谢!
【问题讨论】:
-
只是一个提示:在头文件中定义变量不是一个好习惯。这很容易出现“多重定义”错误。
-
在“glob.h”中定义,现在问题是符号无法解析。我想知道 eclipse 是否无法确定 foo 是在 test.h 还是 glob.h 中定义的,所以它给出了无法解析的符号?
标签: c eclipse eclipse-cdt