我正在编写用于测试的代码,其中有一个 TestUtil.h
,它定义了两个常量和一些函数。我将此头文件实现为 TestUtil.cpp,还有第三个文件 ActualTests.cpp,我在其中编写实际测试。 TestUtil.h
和 TestUtil.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
中,我包含上面的头文件并给出实现:
#include "TestUtil.h"
namespace SNMPSubAgentTesting {
namespace MibDataReaderTesting {
//implementations
}
}
在第三个文件 ActualTests.cpp
中,我再次包含 TestUtil.h
以便使用 util 函数:
#include "TestUtil.h"
namespace SNMPSubAgentTesting {
namespace MibDataReaderTesting {
//Test class and tests
}
}
编译器给出链接错误,并表示 TestUtil.h 中的两个 const 变量已在 TestUtil.cpp 中定义,因此ActualTests.cpp
无法编译。由于 const 变量是内部链接的,并且我们可以将包含 const 变量的 header 包含在多个文件中而不会出现链接错误,为什么在我的情况下它没有链接?是因为嵌套的命名空间吗?
编辑:我正在使用 Microsoft 单元测试框架进行测试。 const 变量位于 MibDataReaderTesting 命名空间中,而不是全局命名空间中。
我的源代码中有头文件,它们包含在多个文件中,并且其中包含 const 变量。在这种情况下没有错误,但对于测试用例它给出了错误。源代码和测试代码之间唯一的区别是测试框架和嵌套命名空间
最佳答案
如 this internal linkage reference 中所述const
限定名称具有内部链接。
问题是您的名称未 const
限定。 const
用于指针指向的数据,而不是变量本身。
您需要在正确的位置添加一个const
:
const wchar_t* const TEST_MUTEX_NAME = L"TestMutex";
// ^^^^^
// Make TEST_MUTEX_NAME itself constant
关于c++ - 包含 const 变量并包含在多个文件中的 header 的链接错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58874285/