删除并重新添加stdafx.cpp后导致"fatal error C1083"错误的解决方法

来源:互联网 发布:淘宝花呗分期怎么还款 编辑:程序博客网 时间:2024/06/08 15:34

http://hi.baidu.com/markl22222/blog/item/4cee6a54a93673173b293527.html

 

昨天晚上心血来潮的清理一下工作区,发现文件太多太乱了,于是全部手动删除后重新添加分类了一次,结果VS2005竟然报"fatal error C1083: 无法打开预编译头文件"...在后来的一个钟头里,我尝试了各种方法都无法修复这个bug,而我的工作区又不能不使用预编译头,真是郁闷了...

于是我新建了一个叫"Test"的工作区,在里面单独测试这个问题,发现主要是因为我重新添加了stdafx.cpp导致的.为什么重新添加一遍这个文件就会出现这个问题呢?后来在网上搜到一篇文章,是关于VC6重新添加这个文件后出错然后解决的方法(vc的stdafx文件和C1083、C1010错误),于是我也用UltraEdit比较了一下工作区里的"test.vcproj",正常文件里是这样写的:

    <File
     RelativePath="./stdafx.cpp"
     >
     <FileConfiguration
      Name="Debug|Win32"
      >
      <Tool
       Name="VCCLCompilerTool"
       UsePrecompiledHeader="1"
      />
     </FileConfiguration>
     <FileConfiguration
      Name="Release|Win32"
      >
      <Tool
       Name="VCCLCompilerTool"
       UsePrecompiledHeader="1"
      />
     </FileConfiguration>
    </File>

而到了出错的文件里变成了这样:

    <File
     RelativePath="./stdafx.cpp"
     >
    </File>

简简单单的两行...我把出错文件里少的那段描述补上去就ok了...汗一个,微软怎么会干这种事情,肯定是这个文件在工作区里默认就和其他文件不一样,因为这个文件毕竟在预编译时起到了很大的作用.

于是我比较了一下正常工作区里这个文件的属性和出错的时候到底有什么不同,结果发现原来在正常状况下,这个cpp的预编译属性为"创建预编译头(/Yc)",而普通文件则为"使用预编译头(/Yu)".在删除并重新添加了这个cpp之后,它的属性由"创建"变成了"使用",所以就导致了在编译工作区时没有创建预编译头而找不到文件的bug...解决这个问题最简单的办法就是单独修改"stdafx.cpp"的预编译属性,调整为"创建预编译头(/Yc)"后工作区就正常了.