2

こんなに簡単に聞こえるものがこんなに難しいなんて信じられない。

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

これを正しく行うにはどうすればよいですか?さまざまなドキュメントから、定数であるにもかかわらず、静的メンバー オブジェクトを初期化できないことを理解しています。

4

2 に答える 2

3

定義とともに、クラスの外部に初期化を記述します。

class OutputHandler
{
private:
    static std::string const errorPrefixes[];
};

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

(もちろん、定義は 1 つの定義規則の対象となり、1 つの翻訳単位にのみ出現する必要があります。たとえば、OutputHandler.cpp.)

于 2013-10-06T13:35:50.103 に答える
3

one-definition-rulestaticを満たすには、ソース ファイルでメンバーを初期化する必要があります。

// in .h
class OutputHandler {
private:
    static std::string const errorPrefixes[]; // declaration
};

// in .cpp
// definition
std::string const OutputHandler::errorPrefixes[] = {"INFO", "WARNING", "ERROR", "CRASH"};
于 2013-10-06T13:37:38.710 に答える