使用VS中的"显示所有文件"选项,我添加了一个文件夹并在该文件夹中创建了一个新类.由于我使用的是预编译头文件,因此我还需要包含相对于新类文件的根目录中的stdafx.h.
在我的cpp文件中我有
#include "..\stdafx.h"
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
错误C1010:查找预编译头时意外结束文件.你忘了在你的来源添加'#include"stdafx.h"'吗?
我的理解是,..应该指示编译器进入一个目录级别?
Who*_*aig 18
Visual C++允许您定义几种设置预编译头文件的方法.最常见的是在项目配置级别为所有源文件启用它,在Configuration Properties/C++/Precompiled Headers下,设置"Precompiled Header",选择"Use".设置"预编译头文件"的相同位置通常是"stdafx.h".所有文件都将获得此设置(因此项目中的配置)除外....
一个文件负责生成PCH文件.该文件通常是项目中的stdafx.cpp文件,除了之外通常没有任何内容#include "stdafx.h".为THAT ONE FILE配置预编译头,从"使用"切换到"创建".这确保了如果PCH的prime-header不同步,则stdafx.cpp始终首先编译以重新生成PCH数据文件.在Visual Studio中还有其他配置PCH设置的方法,但这是最常见的方法.
话虽这么说,你的问题肯定是恼人的.用于填充PCH系统并在上面的"使用..."和"创建..."设置中指定的文件名必须与您的文本匹配#include恰好.
因此,您很可能通过在项目包含目录中添加".."并从#include语句中删除".."来解决您的问题.您也可以在项目配置级别将其更改为"..\stdafx.h"作为直通标头,但如果您在多个文件夹中分层次地存储源文件,则可能会出现问题.
哦,如果您在仔细阅读PCH配置设置时不清楚,如果您不想将PCH用于任何特定的源文件(并且有时候没有理由),您可以将其关闭以用于特定的源文件,否则一定要在每个源文件(c/cpp等)的头部总是有#include"your-pch-include-file.h".
希望你休息一下.
atl*_*ste 12
有趣的是,我使用的技巧不在答案中:
不要更改任何CPP文件; 保持头文件不变.按原样构建.
没有打字,没有RSI,没有包含路径的麻烦,没有其他痛苦和痛苦.美妙的是,当您将解决方案移动到另一个平台时,它仍然可以工作.真棒.
Fel*_*bek 10
我通常也喜欢在我的项目中使用分层顺序,我发现有两种简单的方法可以包含预编译的头文件:
或
将目录放在stdafx.h编译器的include目录中.
(属性 - VC++目录 - 包含目录:添加$(ProjectDir))
要么
如果没有太多的子目录,绕过错误消息的简单方法是这样的:
stdafx.h文件放入每个子目录中,这些子目录只包含顶级stdafx.h:
#include "..\stdafx.h"#include "stdafx.h"为子目录中所有源文件的第一行,而不是包含顶级文件.这样,您的所有代码文件都使用相同的预编译头文件,并且没有其他复杂的设置可以执行.