后台...
- C++中的代码项目
- 项目使用precomp.h预编译头
- 项目包含Foo.h和Foo.cpp
- Foo. h不引用precomp. h
- Foo.cpp以
#include "precomp.h"
和#include "Foo.h"
开始 - 无构建问题
问题...
- 我正在添加Bar.h和Bar.cpp,以添加一个新的功能集,在架构上类似于Foo.h/.cpp中的内容,并且位于同一目录中
- 镜像Foo,我不包括Bar.h中的precomp.h,而包括Bar.cpp中的precomp.h和Bar.h
- 我将Bar.h和Bar.cpp添加到.vcxproj文件中,方法与添加Foo.h和Foo.cpp的方法相同
- 在添加Bar之前通过的相同构建类型在添加Bar.h/.cpp时失败,标题中有错误(
error C1010: unexpected end of file while looking for precompiled header
)
提问...
我已经尝试了许多不同的组合,试图让这个工作,但**我很困惑,为什么Foo没有给同样的问题,酒吧是。我是不是错过了什么微妙的东西?我应该寻找什么样的细微差别呢?**据我所知,Foo和Bar的所有相关设置都是相同的。
What I've Tried,and What I Expect...
我试过在include语句中来回移动(许多尝试都导致了大量的严重错误,这表明这绝对不是正确的方法)。考虑到Foo使用它的include结构,我希望它以同样的方式为Bar工作,并且我希望以同样的方式为Bar工作,以确保整个项目的一致性。
其他信息...
- 我每次都做了非常彻底的清理/重建,所以任何奇怪的状态问题都应该能够作为原因被消除
- Foo.h和Bar.h都在顶部包含
#pragma once
,FWIW - 这个项目已经设置为使用预编译的头文件,所以不管是什么问题,都应该是我添加的文件所特有的(错误是特别引用了Bar.h)
先谢谢你了!
**编辑:**为清楚起见,此处添加完整错误...
"D:\src\[PATH1]\[PARENT].vcxproj" (default target) (1) ->
"D:\src\[PATH2]\[PROJECT].vcxproj" (default target) (2) ->
(ClCompile target) -> d:\src\[PATH]\Bar.h(86,1): error C1010:
unexpected end of file while looking for precompiled header. Did you
forget to add '#include "precomp.h"' to your source?
[D:\src\[PATH2]\[PROJECT].vcxproj]
1条答案
按热度按时间vm0i2vca1#
正如我在上面的评论中提到的(但我不确定),当您以Visual Studio(或MSBuild)尝试 * 直接 * 编译.h文件而不是在包含在.cpp文件中时进行编译的方式添加. h文件时,可能会发生这种情况。
要做到这一点,最简单的方法是确保在添加现有头文件时,右键单击Visual Studio中解决方案资源管理器中的“头文件”文件夹/筛选器,以及用于编译(.c,.cpp)文件的“源文件”文件夹/筛选器。请注意,这里的文件夹不需要反映实际的物理文件夹(在许多情况下也不需要)。它们是文件的逻辑划分,并且通常也按 type 划分。
但是,无论文件夹是什么,文件都可能配置错误。要使用Visual Studio查看此情况,请右键单击有问题的文件。对于头文件,“项目类型”字段应显示“C/C++ Header”,而不是“C/C++ compiler”。类似地,.cpp文件应该说“C/C编译器”,并且由于左侧的“C/C”类别而具有更多的选项。注意:如果需要,可以在这里放置特定于文件的编译器命令,并查看pch.cpp的“C/C++->Precompiled Headers”部分与项目中的所有其他部分有何不同!
如果查看XML文件,请查看
PROJECT_NAME.vcxproj
,头文件应该在标记<ClInclude Include="Foo.h" />
中,而源文件在<ClCompile Include="Foo.cpp" />
中。您的“.vcxproj.filters”文件也应该具有类似的XML标记。如果头文件或源文件在错误的标签中,那么你就有问题了。希望这对其他有类似编译问题的VS用户有帮助。