header 包含 const 变量并包含在多个文件中的链接错误?

Linkage error for a header containing const variables and included in multiple files?

我正在编写测试代码,其中我有一个 TestUtil.h,它定义了两个常量和一些函数。我将此 header 文件实现为 TestUtil.cpp,并且还有第三个文件 ActualTests.cpp,我正在其中编写实际测试。 TestUtil.hTestUtil.cpp 只是编写简洁测试的帮助文件。

我有嵌套的命名空间,TestUtil.h 看起来像这样:

namespace SNMPSubAgentTesting {

  namespace MibDataReaderTesting {

     const wchar_t* TEST_MUTEX_NAME = L"TestMutex";

     const wchar_t* TEST_MEMORY_NAME = L"TestMemory";

   //some functions 
   } 
}

在实现中 TestUtil.cpp 我包含上面的 header 文件并给出实现:

#include "TestUtil.h"

 namespace SNMPSubAgentTesting {

  namespace MibDataReaderTesting {
     //implementations
  }
}

在第三个文件 ActualTests.cpp 中,我再次包含 TestUtil.h 以便使用 util 函数:

#include "TestUtil.h"

 namespace SNMPSubAgentTesting {

  namespace MibDataReaderTesting {

     //Test class and tests
  }
}

编译器给出了一个linkage 错误,并说 TestUtil.h 中的两个 const 变量已经在 TestUtil.cpp 中定义,因此 ActualTests.cpp 不能被编译。由于 const 变量在内部被 linked 并且我们可以在多个文件中包含包含 const 变量的 header 而不会出现 linking 错误,为什么它不 link 就我而言?是因为嵌套的命名空间吗?

编辑:我正在使用 Microsoft 单元测试框架进行测试。 const 变量在 MibDataReaderTesting 命名空间中,而不是在全局命名空间中。

我的源代码中有 header 个文件,这些文件包含在多个文件中,并且其中有 const 变量。在这种情况下没有错误,但对于测试用例,它给出了错误。唯一的区别b/w 源代码和测试代码是测试框架和嵌套命名空间

this internal linkage reference const 中所述,限定名称具有内部链接。

问题是您的名字 const 合格。 const 用于指针指向的数据,而不是变量本身。

您需要在正确的位置添加一个const

const wchar_t* const TEST_MUTEX_NAME = L"TestMutex";
//             ^^^^^
// Make TEST_MUTEX_NAME itself constant