2013-10-06 42 views
2

我不敢相信聽起來那麼簡單的事情可能會如此艱難。如何創建一個靜態常量成員std :: string數組?

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

我該如何正確地做到這一點?從各種文檔中,我明白我無法初始化靜態成員對象,無論它們是否爲常量。

回答

3

編寫類的外部初始化,與定義在一起:

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

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

(定義當然是受一個清晰的規則,而且必須只出現在一個單獨的翻譯單位,例如OutputHandler.cpp。 )

+0

這是字面上的ONL y方式做到這一點? (像加載應用程序時不能在類定義之外沒有任何代碼時自動完成的那樣) –

+0

@Binero:必須定義每個對象(它是odr-used)。這是沒有辦法的。 –

+0

@Binero:爲什麼沒有'const char *'數組呢? –

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"}; 
相關問題