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

C++ C+中的共享字符串常量+;,c++,header,linker,C++,Header,Linker,我想定义一个可以被各种类使用的字符串常量。 因此,我创建了一个头文件并添加了: namespace MyConstants { extern const char* Constant1 = "SomeString"; } 这个头包含在几个.cpp文件中,我从中访问字符串 这会导致以下链接器错误: 致命错误LNK1169:找到一个或多个多重定义符号 如何更改字符串的声明以消除此链接器错误?您需要在一个翻译单元中定义值,并在标题中保留纯声明 namespace MyConstants {

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

namespace MyConstants
{
    extern const char* Constant1 = "SomeString";
}
这个头包含在几个.cpp文件中,我从中访问字符串

这会导致以下链接器错误:

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


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

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

namespace MyConstants
{
    extern const char* Constant1;
}
在一个翻译单元中:

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

您需要在一个翻译单元中定义该值,并在标题中保留纯声明

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;
}


您可以使用
constexpr

// In header
namespace MyConstants
{
    constexpr const char* Constant1 = "SomeString";
}
或拆分声明和定义

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


我认为你们不应该在声明中给变量赋值。若你们在这里放一个,这会更简单。我认为你们不应该在声明中给变量赋值。若你们在这里放一个,这会更简单。我甚至不认为使用constexpr会解决它!投赞成票!:)我甚至没想到使用constexpr就能解决它!投赞成票!:)