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
(in)的其他文件C
- (Edit)确保
未被任何文件stdafx.h
#包括
-ed,项目设置除外。
感谢Ari0nhh、user975989和TripeHound - (编辑)确保在完全重建时,
确实包含了C2.cpp
(查看B1.h
的控制台)显示包含
- (编辑)修复VS2015没有帮助李>
- (编辑)卸载大多数VS2015扩展没有帮助
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”
行(粗略地说)会用预编译状态替换编译器的“当前状态”,因此该行之前指令中的任何“状态”都会丢失。但是,正如我所说,这只是一个轶事。