为简单起见,我有一个项目,该项目的类/文件可以分为两组B
和C
.
C
通常取决于(#include
)一些B
.
让我们说C1
,C2
......并C5
依赖B1
于此,没有什么特别之处: -
B1.h
class B1{/** some code */};
B1.cpp
#include "B1.h" /** some code */
C1.h
class C1{/** some code */};
C1.cpp
#include "C1.h" #include "B1.h" /** some code */
C2.h
class C2{/** some code */};
C2.cpp
#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文件夹中的所有内容(%Temp%
)
删除所有.suo
,.user
,.ncb
,.sbr
,.log
,.sdf
,.pdb
有关我的项目
确认C2.cpp
的date modified
时间和系统时间是正确的.
(编辑),确保stdafx.h
不包括这是我的项目,如的一部分的任何文件B
,C
包括和其他人B
或C
直接(中).
(编辑)除项目设置外,确保stdafx.h
没有#include
任何文件的-ed.
感谢 Ari0nhh,user975989和TripeHound.
(编辑)确保完全重建时,C2.cpp
确实包括B1.h
(查看show include
控制台).
(编辑)修复VS2015无济于事.
(编辑)卸载大多数VS2015扩展程序没有帮助.
如果我修改C2.cpp
(例如添加空格字符),则保存并构建,C2.cpp
将链接到B1.h
.
现在,如果我编辑B1.h
并按下F5,C2.cpp
现在将自动重新编译(正确).
这不是一种治疗方法,因为我还有许多其他C2
想要联系的方法B1.h
.
......这是非常可疑的
...在我改变了一些项目设置(不确定哪个)后,C2.cpp
再也没有链接了.
删除/重新创建一个新文件 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/
我删除了所有内容#X
,但没有删除#Y
.
删除所有.obj
的#Y
可能是解决这一问题的措施.
我将不得不对它进行更多测试,以确定这种方法的可靠程度......
请注意,上述所有问题仍然没有答案.