我无法相信听起来如此简单的事情会如此艰难。
class OutputHandler {
private:
static std::string const errorPrefixes[] = {"INFO", "WARNING", "ERROR", "CRASH"};
};
我该如何正确地做到这一点?从各种文档中我了解到我无法初始化静态成员对象,无论它们是否为常量。
答案 0 :(得分:3)
在类外部编写初始化以及定义:
class OutputHandler
{
private:
static std::string const errorPrefixes[];
};
std::string const OutputHandler::errorPrefixes[] = {"INFO", "WARNING", "ERROR", "CRASH"};
(该定义当然受单一定义规则的约束,并且只能出现在一个单一的翻译单元中,例如OutputHandler.cpp
。)
答案 1 :(得分:3)
您必须在源文件中初始化static
成员才能满足one-definition-rule:
// in .h
class OutputHandler {
private:
static std::string const errorPrefixes[]; // declaration
};
// in .cpp
// definition
std::string const OutputHandler::errorPrefixes[] = {"INFO", "WARNING", "ERROR", "CRASH"};