如何创建一个静态常量成员std :: string数组?

时间:2013-10-06 13:33:38

标签: c++ static const member

我无法相信听起来如此简单的事情会如此艰难。

class OutputHandler {
private:
    static std::string const errorPrefixes[] = {"INFO", "WARNING", "ERROR", "CRASH"};
};

我该如何正确地做到这一点?从各种文档中我了解到我无法初始化静态成员对象,无论它们是否为常量。

2 个答案:

答案 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"};