c++中的共享字符串常量

Shared string constant in C++

本文关键字:字符串 常量 共享 c++      更新时间:2023-10-16

我想定义一个可以被各种类使用的字符串常量。所以我创建了一个头文件,并添加:

namespace MyConstants
{
    extern const char* Constant1 = "SomeString";
}

这个头包含在几个.cpp文件中,我从中访问字符串。

这会给我以下链接错误:

致命错误LNK1169:找到一个或多个乘法定义的符号

我需要如何改变字符串的声明,使这个链接错误消失?

只需要在一个翻译单元中定义值,并在头文件中保留一个纯声明。

namespace MyConstants
{
    extern const char* Constant1;
}

在一个翻译单元中:

namespace MyConstants
{
    extern const char* Constant1 = "SomeString";
}

您可以使用constexpr

// In header
namespace MyConstants
{
    constexpr const char* Constant1 = "SomeString";
}

或拆分声明和定义

// In header
namespace MyConstants
{
    extern const char* Constant1;
}

// in one unique cpp.
namespace MyConstants
{
    extern const char* Constant1 = "SomeString";
}