C++ 项目已损坏?:。cpp在编辑相关头文件后不会自动重新编译

C++ 项目已损坏?:。cpp在编辑相关头文件后不会自动重新编译,c++,visual-studio-2015,C++,Visual Studio 2015,为简单起见,我有一个项目,其中类/文件可分为两组B和C C通常取决于(#include)一些B 比如说,C1,C2,。。。而C5取决于B1,这里没有什么特别之处:- B1.h class B1{/** some code */}; B1.cpp #include "B1.h" /** some code */ #include "C1.h" #include "B1.h" /** some code */ #include "C2.h" #include "B1.h" /** som

为简单起见,我有一个项目,其中类/文件可分为两组
B
C

C
通常取决于(
#include
)一些
B

比如说,
C1
C2
,。。。而
C5
取决于
B1
,这里没有什么特别之处:-

B1.h

class B1{/** some code */}; 
B1.cpp

#include "B1.h"
/** some code  */
#include "C1.h"
#include "B1.h"
/** some code  */
#include "C2.h"
#include "B1.h"
/** some code  */
C1.h

class C1{/** some code  */};
class C2{/** some code  */};
C1.cpp

#include "B1.h"
/** some code  */
#include "C1.h"
#include "B1.h"
/** some code  */
#include "C2.h"
#include "B1.h"
/** some code  */
C2.h

class C1{/** some code  */};
class C2{/** some code  */};
C2.cpp

#include "B1.h"
/** some code  */
#include "C1.h"
#include "B1.h"
/** some code  */
#include "C2.h"
#include "B1.h"
/** some code  */
问题 当我修改
B1.h
并按F5时,应该重新编译
C1.cpp
C2.cpp

但在我的例子中,它并不是-VS重新编译的,只
C1.cpp

我必须重建整个项目,以间接强制重新编译
C2.cpp
,否则将发生此错误:-

在d:…\B1.h中找到了B1.h的副本, 但是当前的源代码与内置的版本不同 d:…\B1.h

注意:两个位置
d:\…\B1.h
完全相同

经过几个月的编码,这个问题昨天才发生在我身上。
在彻底查找错误后,该问题只会出现在该特定文件(
B1.h
)上。
其他
Bi
正常

我尝试过的 (与以下问题的答案相似)

  • 删除bin文件夹中的所有内容(包括调试和发布)#X文件夹(见下文)
  • 清理项目和重建(这只是一次性修复。)
  • 重构(自动重命名)
    B1
    为其他内容(以及文件名)
  • 删除该文件,创建一个新文件
    B1.h
    ,然后从旧的
    B1.h
    复制源代码
  • 重新启动我的电脑几次
  • 删除Visual Studio临时文件夹中的所有内容(
    %Temp%
  • 删除与我的项目相关的所有
    .suo
    .user
    .ncb
    .sbr
    .log
    .sdf
    .pdb
  • 确保
    C2.cpp
    修改日期
    时间和系统时间正确
  • Edit)确保
    stdafx.h
    不包含属于我的项目的任何文件,例如
    B
    C
    ,以及直接包含
    B
    C
    (in)的其他文件
  • Edit)确保
    stdafx.h
    未被任何文件
    #包括
    -ed,项目设置除外。
    感谢Ari0nhh、user975989和TripeHound
  • 编辑)确保在完全重建时,
    C2.cpp
    确实包含了
    B1.h
    (查看
    显示包含
    的控制台)
  • 编辑)修复VS2015没有帮助
  • 编辑)卸载大多数VS2015扩展没有帮助
线索1 如果我修改
C2.cpp
(例如添加空格字符),然后保存并生成,
C2.cpp
将链接到
B1.h

现在,如果我编辑
B1.h
并按F5,
C2.cpp
现在将自动重新编译(正确)。
这不是一种治疗方法,因为除了
C2
之外,我还有很多其他的方法想要链接到
B1.h

... 而且非常可疑
... 在我更改了一些项目设置(不确定是哪个项目)之后,
C2.cpp
不再链接

线索2 删除/重新创建新文件
B1.h

这个解决方案解决了这个问题,但如果我重新启动计算机,效果就会消失

问题:
  • 如何修复项目以使自动重新编译过程再次正确?
    更具体地说,我正在搜索某种“最终清洁/修复此项目””按钮
  • (第二个问题)问题的原因是什么
很难查明原因,因此欢迎部分答案或不确定的猜测

一些进展 一天后,它终于正确地重新编译了
C2.cpp
——即使是在计算机重新启动之后

我仍然不确定是我的哪一个行动修复了它

然而,这里是我的猜测,以防万一它可能对某人有用

我的项目文件结构如下:-

F/
F/Debug/     <--#X contains .exe,.exp,.ilk,.lib,.pdb; one file per type
F/Release/
F/F/         <-- contains all my .cpp,.h; 
F/F/Debug/   <--#Y contains many .obj of my own code, .pch, .log, .tlog
F/F/Release/
F/

F/Debug/您是否使用预编译的头文件,并且
B1.h
是否包含在
stdafx.h
中?@Ari0nhh是的,我使用stdafx。我不包括在内,但我会反复检查。猜得好。如果您使用的是预编译头,那么预编译头必须是每个源文件中的第一个
#include
,并且必须包含在每个源文件中。至少对于MSVC来说没有链接,只是VS2008的轶事经历。。。偶尔会出现“为什么****不能正常工作”的问题,这似乎是由于(意外地)在
#include“stdafx.h”
行上方有其他include和/或预处理器命令造成的,这些命令似乎没有任何效果。当我将它们移到下面(和/或完全打开预编译的标题)时,一切都开始按预期工作。。。[续][续]。。。我的猜测是,遇到
#include“stdafx.h”
行(粗略地说)会用预编译状态替换编译器的“当前状态”,因此该行之前指令中的任何“状态”都会丢失。但是,正如我所说,这只是一个轶事。