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

Joh*_*s P 6 c++ eclipse eclipse-cdt

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

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

int a = 42;
Run Code Online (Sandbox Code Playgroud)

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

#include <cstdio>

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

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

STL*_*Dev 0

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

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

将您的#include "foo.h"陈述移至您的void main()...陈述之上,然后重试。

  • '_C++ 包含文件必须包含在模块的顶部_' 你能显示此规则的官方来源吗?这根本不是真的(好的做法是的,但不是真的) (5认同)