【问题标题】:Compile errors with one project only after adding a second project仅在添加第二个项目后才使用一个项目编译错误
【发布时间】:2014-01-09 06:46:59
【问题描述】:

我在 VS2012 中有一个编译良好的解决方案。我想为它写一些单元测试,发现WinUnit

为方便起见,我将 WinUnit 测试项目提取到我的解决方案中。

我删除了他们的示例文件,并开始引用我想要测试的 Google's diff_match_patch 副本。

我将 .h 文件添加到我的项目并编译后,我在 diff_match_patch 文件中出现 3 个错误。这个文件在我添加新项目之前编译得很好。

错误 3 错误 C2059:语法错误:'(' ...\diff_match_patch.h 103 1 TestSampleLib

错误 4 错误 C2143:语法错误:缺少 ';'在'}'之前 ...\diff_match_patch.h 104 1 TestSampleLib

错误 5 错误 C2238:';' 前面的意外标记...\diff_match_patch.h 104 1 测试样本库

所有错误都围绕此代码:

enum Operation {
   DELETE, INSERT, EQUAL
};

我认为这可能是我缺少的一些参考,但我已经添加了我能想到的所有内容,但仍然无法编译。

这些是我得到的唯一错误,所以我无法找出根本原因。

什么会使这个原本可编译的文件失败?

【问题讨论】:

  • 该 .h 文件中可能存在与您的标识符冲突的错误 #define 宏。
  • @n.m.我确实去掉了那个单元测试文件。它只有 .h 引用,以及来自 WinUnit 的空 BEGIN_TEST 函数。

标签: c++ visual-studio unit-testing compiler-errors google-diff-match-patch


【解决方案1】:

看来宏名污染了。您可以尝试在枚举定义之前 #undef 所有名称,看看会发生什么。

【讨论】:

  • 虽然不完全是答案,但污染就是正在发生的事情。 winnt.h 中有一个#define DELETE,它包含在我的单元测试项目中。太好了,谢谢!
猜你喜欢
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 2013-06-24
  • 2016-10-23
相关资源
最近更新 更多