这个问题涉及在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中是否有任何选项可以在解析符号之前执行预处理?
旁注:我知道这个代码设计不受欢迎,但是我需要导入其他人编写的代码,并且需要正确设置内容辅助才能提高工作效率。
答案 0 :(得分:2)
看起来Eclipse中的代码分析器存在许多已知问题。例如,请参阅此问题Turn off eclipse errors (that arent really errors),了解如何禁用部分或全部错误消息。不确定这个“解决方案”对你来说是否足够好,但据我所知它不应该影响代码索引器的其他方面。
答案 1 :(得分:2)
由于任何包含应该只是一些“普通复制和粘贴”,这可能是Eclipse / CDT中的一个错误。
我不知道你需要的是否有所有东西,但我只是检查了一下,至少没有关于你上面的最小例子的混淆。 (据我所知,代码突出显示和协助正在发挥作用。)
另一个非常流行的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;
?