有关不同内容

时间:2015-04-28 08:08:13

标签: c++ visual-studio

当我在Visual Studio中调试我的C ++项目时,会弹出一个警告对话框,告诉我:

A copy of datum.h was found in
c:/users/brad/desktop/source/binary/datum.h, but the current
source code is different from the version built into
c:/users/brad/desktop/source/binary/datum.h.

我无法理解这甚至想告诉我什么,更不用说如何解决它了。起初我以为可能会抱怨我不小心复制了目录中的一个文件,我查了一下这个文件,并没有发现任何类型,这让我很难过。我也尝试从解决方案中排除该文件并再次添加,但这也没有解决问题。

警告似乎并没有真正阻碍我的项目的发展,但我认为警告存在是有原因的,所以如果有人知道出了什么问题,任何建议都会非常感激。据我所知,我没有改变任何东西导致消息出现,它只是弹出一次我去调试解决方案并一直出现在那里。

此外,相同警告的更多副本已经开始弹出,与我的解决方案中的其他头文件有关(我还没有收到任何有关.cpp文件的信息,但这可能是巧合,因为它只是在继续大约20分钟)。

13 个答案:

答案 0 :(得分:24)

尝试从相关文件中删除断点。 当Visual Studio 2013出现在调试版本中的头文件时,这对我有用。 Source: Release mode file sync issue - current source code different from the version built

附加说明:Clean / Rebuild也可以,但是对于定期更改代码来说这很痛苦。启动调试器后启用断点只会延迟消息。

答案 1 :(得分:12)

我解决了它:

  1. 如果Visual Studio中的.h文件已打开,请将其关闭。
  2. 关闭Visual Studio。
  3. 从正常位置剪切.h文件并将其粘贴到VS不知道的临时文件夹中。
  4. 重启VS并编译。它会抱怨丢失的.h文件。好 - 让那个混蛋乞求它!
  5. 将.h文件粘贴回原始位置。
  6. 编译。 VS会感激地接受丢失的文件。 (该死的我讨厌微软!)

答案 2 :(得分:4)

问题是调试器认为源文件的校验和与编译器计算和放在那里的校验和不同。然后,调试器将拒绝在不匹配的文件中应用断点,以防止您看到无法保证的数据是正确的。

即使经过干净的重建,我仍然会继续这样做。这是VS 2015。我的猜测可能是调试器和编译器在如何哈希换行或类似的事情上意见不一致?修复是在Debug - >中关闭“要求源文件与原始版本完全匹配”。选项 - >调试 - >一般

答案 3 :(得分:1)

你有没有机会调试另一个可执行文件(不是实际构建的那个?)。在Visual Studio在一个目录中构建二进制文件但随后将它们复制到其他目录以进行调试的情况下,这是一个常见问题。我建议你比较调试设置下的目标路径和Visual Studio中常规设置下的输出目录。

TargetPath

这可以解释这个问题,因为你实际上正在调试一些旧版本的二进制文件(不是当前构建的版本)而是警告,因为Visual Studio无法找到该版本的源文件的版本二进制的。

答案 4 :(得分:1)

原因可能是循环标头依赖项。 datum.h可以包含another_header.h(直接或间接),其中包括datum.h。

答案 5 :(得分:1)

我看到这个问题的真正原因没有得到解答。所以对于仍在寻找的人来说,这里......      此问题的最常见原因是用于构建现有obj文件的源文件与现有文件不同。换句话说 在对源进行新的修改后,特定项目没有构建。此问题的解决方案是在修改后重建项目。      在我修改了我的静态库项目文件的情况下发生了这种情况,然后在没有构建该项目的情况下,我启动了使用此静态库项目的应用程序项目。

答案 6 :(得分:1)

如果将实现文件(* .c,*。cpp等)重命名为头文件,则会发生这种情况。

这是因为项目类型仍保持为C/C++ Source File,从而使其被编译为一个单独的翻译单元,而不是作为实际的标头,从而阻止Visual Studio将其包含为标头在其他地方。

我花了很长时间才弄清楚这一点。

要解决此问题:

  1. 在解决方案资源管理器中右键单击头文件,然后选择“属性”。

  2. 选择所有配置所有平台

  3. 在一般情况下,将商品类型更改为C/C++ Header

  4. 按“确定”。

  5. 强制重新编译#include标头的文件(或者只是Rebuild解决方案的文件)。

答案 7 :(得分:0)

这对我有用:

  • 关闭VS
  • 删除*.vcxproj.filters文件
  • 重启VS

问题应该消失。

答案 8 :(得分:0)

这对我有用:

  1. 清洁项目
  2. 调试/删除所有断点:)

答案 9 :(得分:0)

这对我有用(截至2019年3月):

  1. 点击Visual Studio窗口左上方的“构建”下拉菜单
  2. 选择“重建解决方案”

答案 10 :(得分:0)

我已经更改了文件名,现在可以使用了。

答案 11 :(得分:0)

刚刚遇到了这个。就我而言,我的.h文件之一包含实现(带有静态方法的类),该实现包含在我的.cpp文件之一中,但是项目设置还告诉Visual Studio编译该实现。 .h文件。

我手动编辑了.vcxproj.vcxproj.filters项目文件,将.h文件从<ClCompile>项目组移动到<ClInclude>项目组。

这帮了我大忙;我再也没有看到“ ...的副本不同于... ”弹出窗口。
(请注意,这是在我尝试获取{{ 1}}上班。)

答案 12 :(得分:0)

我的解决方法:

  1. 构建->配置管理器
  2. 切换到其他配置(任何版本,例如Releas或Debug)
  3. 切换到以前的配置