6

这个问题涉及在 Eclipse 4.2.2 (Juno) 中使用 CDT 8.1.2 管理的 C++ 项目。以下代码片段将编译,但在 Eclipse 中将显示为有错误。

我有一个名为 foo.h 的文件,内容如下:

int a = 42;

该文件包含在另一个文件 foo.cpp 中:

#include <cstdio>

int main() {
    #include "foo.h"
    printf("%d", a);
    return 0;
}

如何解决“无法解析符号'a'”?据我了解,main() 函数中的#include 语句应该只触发预处理器中的复制粘贴操作。CDT 似乎已正确索引文件,因为我可以按住 CTRL 键单击文件名“foo.h”,然后在 IDE 中打开该文件。有趣的是,如果我将语句移到#include "foo.h"语句下方#include <cstdio>,它会按预期工作。CDT 中是否有任何选项可以在解析符号之前执行预处理?
旁注:我知道这种代码设计不受欢迎,但是我需要导入其他人编写的代码,并且需要正确设置内容辅助才能提高工作效率。

4

7 回答 7

2

Looks like there are many known issues with the code analyser in Eclipse. See for example this question Turn off eclipse errors (that arent really errors) on how to disable some or all of the error messages. Not sure if that "solution" will be good enough for you but from what I understand it should not impact other aspects of the code indexer.

于 2013-07-08T21:47:39.680 回答
2

由于任何包含都应该只是一些“简单的复制和粘贴”,这很可能是 Eclipse/CDT 中的一个错误。

如果你使用 KDE,你可以试试KDevelop

我不知道是否有您需要的一切,但我刚刚检查过,至少对您上面的最小示例没有混淆。(据我所知,代码突出显示和协助正在发挥作用。)

在此处输入图像描述

另一个非常流行的 Linux IDE 是Netbeans。我不能告诉你它是否会支持那种“内联包含”,但它们都很受欢迎,值得一试。

也许这个错误是一个“提示”,让你不要做你的意图。我不知道谁会将代码写入意味着内联包含的标头中,但与其努力更改您的 IDE/搜索新的,您可能应该重构代码,会有更大的好处我认为。

于 2013-07-09T18:22:36.807 回答
0

我的一些同事使用Source Insight(商业化,但价格公道)并且对此深信不疑。但不幸的是,这似乎只适用于 Windows。

除了代码块(正如其他人已经提到的),您可能会尝试CodeLite IDE,与 Eclipse CDT 相比,它们的质量无法说明任何事情。

于 2013-07-09T09:47:51.600 回答
0

通常,C++ 包含文件(.h 或文件)应该包含在模块的开头,而不是与模块的代码混合。

您的开发环境似乎遇到了一个错误,即它无法正确处理函数中间包含的头文件。

将您的陈述移到您的#include "foo.h"陈述之上void main()...,然后再试一次。

于 2013-06-08T22:53:39.640 回答
0

您的最新更新意味着您可以使用其他 IDE。他们是否必须支持 GCC,或者您是否仅限于在 Linux 上运行,或者您只是使用 CDT 来提供调用图等?

您能否使用 Visual Studio express 之类的工具来编译项目并使用那里可用的工具来了解代码的结构?

目前尚不清楚您是否真的可以使用另一个 IDE 来理解代码,或者您是否需要能够使用备用 IDE 来交付它。

VS express 2012 适合这种风格。

于 2013-07-07T19:21:14.573 回答
-1

前向声明int a;怎么样?

于 2013-07-05T02:11:56.420 回答
-1

输入 extern int a; …………………………………………………………………………

于 2013-07-04T12:55:06.540 回答