我正在使用#define
编辑所有包含文件的API。我正在使用Visual C ++ 2010 Express进行开发,到目前为止它一直很好用。
我在项目中添加了一个新的cpp文件,而不小心添加了“Windows窗体”。 VC警告我,我的项目目前没有使用CLR,我真的想要吗?我点击否,并按预期添加了文件。然而,在那之后,我的项目不再编译。
代码看起来基本上是这样的:
api_header.h :
#define DEFINED_HEADER_NAME "path/to/header/file.h"
stdhpf.h :
#include DEFINED_HEADER_NAME
正如我所说,长时间工作正常。现在我明白了:
错误C2006:
'#include'
:预期文件名,找到'identifier'
致命错误C1083:无法打开包含文件:''
:没有此类文件或目录
造成这种情况的原因是什么?我发现一些帖子说是因为打开了预编译的头文件,但是我检查了Project properties > Configuration properties > C/C++ / Precompiled headers
,它已经关闭了(我提到设置路径,因为我是VS的新手,可能有不止一种方法做到了......)。
有什么想法吗?
答案 0 :(得分:7)
问题几乎肯定在于预处理两个语句的顺序,而不是与无意中添加Windows窗体对象有关。
This knowledge base article建议:
问题在于使用定义的常量来指定#include指令中的包含文件。在宏完全展开之前正在处理该指令,从而导致错误。
第二个错误似乎证实了这一点,因为它表明预处理器正在搜索一个空名称的包含文件:
fatal error C1083: Cannot open include file: '': No such file or directory
答案 1 :(得分:0)
包含文件的顺序已更改。也许Visual Studio在#include "stdhpf.h"
之前的某处插入#include "api_header.h"
。
答案 2 :(得分:0)
禁用预编译的标头。它应该有所帮助。