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

时间:2015-07-17 07:53:42

标签: c++ header linker

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

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

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

这给了我以下链接器错误:

  

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

我如何更改字符串的声明以使此链接器错误消失?

2 个答案:

答案 0 :(得分:4)

您需要在一个翻译单元中定义值,并在标题中留下纯粹的声明。

namespace MyConstants
{
    extern const char* Constant1;
}

只有一个翻译单位:

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

答案 1 :(得分:1)

您可以使用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";
}