函数体内的#include不起作用(CDT / Eclipse C ++)

时间:2013-06-08 22:46:51

标签: c++ eclipse eclipse-cdt

这个问题涉及在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中是否有任何选项可以在解析符号之前执行预处理?
旁注:我知道这个代码设计不受欢迎,但是我需要导入其他人编写的代码,并且需要正确设置内容辅助才能提高工作效率。

7 个答案:

答案 0 :(得分:2)

看起来Eclipse中的代码分析器存在许多已知问题。例如,请参阅此问题Turn off eclipse errors (that arent really errors),了解如何禁用部分或全部错误消息。不确定这个“解决方案”对你来说是否足够好,但据我所知它不应该影响代码索引器的其他方面。

答案 1 :(得分:2)

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

如果您使用KDE,可以尝试KDevelop

我不知道你需要的是否有所有东西,但我只是检查了一下,至少没有关于你上面的最小例子的混淆。 (据我所知,代码突出显示和协助正在发挥作用。)

enter image description here

另一个非常流行的Linux IDE是 Netbeans 。 我不能给你任何关于它是否会支持那种“内联包括”的信息,但它们都很受欢迎,值得一试。

也许这个错误是一个“提示”,你不要做你的意图。我不知道是谁会将代码编写到一个意味着包含在内的标题中,而不是努力改变你的IDE /搜索新的代码,你应该重构代码,会有更大的好处我想。

答案 2 :(得分:0)

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

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

#include "foo.h"声明移至void main()...声明之上,然后重试。

答案 3 :(得分:0)

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

您是否可以使用Visual Studio express之类的东西来编译项目并使用其中的工具来了解代码的结构?

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

VS express 2012适用于这种风格。

答案 4 :(得分:0)

我的一些同事使用Source Insight(商业,但价格合理)并且非常信服它。但不幸的是,这似乎仅适用于Windows。

除了Code Blocks(正如其他人已经提到的那样),您可以尝试使用CodeLite IDE,与Eclipse CDT相比,无法说出它们的质量。

答案 5 :(得分:-1)

输入extern int a; ...............

答案 6 :(得分:-1)

如何向前声明int a;