我想定义一个可以被各种类使用的字符串常量。 所以我创建了一个头文件并添加了:
namespace MyConstants
{
extern const char* Constant1 = "SomeString";
}
此标头包含在几个.cpp文件中,我从中访问该字符串。
这给了我以下链接器错误:
致命错误LNK1169:找到一个或多个多重定义的符号
我如何更改字符串的声明以使此链接器错误消失?
答案 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";
}