【问题标题】:Symbol could not be resolved eclipse CDT符号无法解析 eclipse CDT
【发布时间】: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;

ma​​in.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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    外部结构 s_foo *foo;

    main.c 文件中的错误声明之前

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-18
      • 2012-06-03
      • 1970-01-01
      • 2013-10-27
      • 2013-12-01
      • 1970-01-01
      相关资源
      最近更新 更多