捕获库问题 - anonymous-namespace 重新定义。怎么解决

Catch Lib issue - anonymous-namespace redefinition. how to solve

我正在使用 Catch Lib 进行单元测试

之前,我单独测试了 headers,TEST_CASEs 没有问题,但在最终将所有这些都包含到项目中后,我遇到了很多这样的错误:

c:\dev\workspace\algolist\src\algolist.hpp(143): error C2374: '`anonymous-namespace'::autoRegistrar143': redefinition; multiple initialization
c:\dev\workspace\algolist\src\mfactory.hpp(143): note: see declaration of '`anonymous-namespace'::autoRegistrar143'
c:\dev\workspace\algolist\src\algolist.hpp(143): error C2084: function 'void ____C_A_T_C_H____T_E_S_T____143(void)' already has a body
c:\dev\workspace\algolist\src\mfactory.hpp(143): note: see previous definition of '____C_A_T_C_H____T_E_S_T____143'

谁能解释一下这是什么意思?

您似乎将 TEST_CASE 放入 HPP 文件,然后将它们都包含在同一个 CPP 文件中。您有多种选择:

  • 改为将测试用例移至 CPP 文件。这是首选解决方案。
  • 将其中一个测试用例向上或向下移动一行,以便 auto-generated 名称不同,因此不会发生冲突。这是 short-term 背影。
  • 如果你真的想通过包含它们来分享这些测试的作用,那么将测试主体留在头文件中,但删除 TEST_CASE 宏,而是从 CPP 中的测试用例调用它们文件。