gpt4 book ai didi

c++ - 包含常量变量并包含在多个文件中的 header 的链接错误?

转载 作者:行者123 更新时间:2023-12-01 14:49:41 25 4
gpt4 key购买 nike

我正在编写用于测试的代码,其中我有一个 TestUtil.h它定义了两个常量和一些函数。我将此头文件实现为 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我包含了上面的头文件并给出了实现:
#include "TestUtil.h"

namespace SNMPSubAgentTesting {

namespace MibDataReaderTesting {
//implementations
}
}

在第三个文件 ActualTests.cpp我再次包括 TestUtil.h为了使用 util 函数:
#include "TestUtil.h"

namespace SNMPSubAgentTesting {

namespace MibDataReaderTesting {

//Test class and tests
}
}

编译器给出链接错误并说两个 const TestUtil.h 中的变量已在 TestUtil.cpp 中定义因此 ActualTests.cpp无法编译。自 const变量是内部链接的,我们可以包含包含 const 的标题多个文件中的变量没有链接错误,为什么在我的情况下没有链接?是因为嵌套命名空间吗?

编辑:我正在使用 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++ - 包含常量变量并包含在多个文件中的 header 的链接错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58874285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com