C++“错误C1010:在为新文件添加新的.h和相应的.cpp时,查找预编译头时出现意外的文件结束

qgelzfjb  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(153)

后台...

  • 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]
vm0i2vca

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用户有帮助。

相关问题