2017-05-30 196 views
0

我有2個靜態const成員,我希望它們是相同的類,所以我使用其他類的其他靜態const成員,我想初始化這些成員的值普通的階級。 它看起來像這樣: 啊:與其他靜態const成員初始化靜態const成員

class A { 
public: 
    static const std::string a; 
}; 

A.cpp:

const std::string A::a = "hello"; 

了Bh:

class B { 
public: 
    static const std::string b; 
}; 

B.cpp:

const std::string B::b = A::a; 

章:

class C { 
public: 
    static const std::string c; 
}; 

C.cpp:

const std::string C::c = A::a; 

問題是我不能初始化靜態常量成員與其他靜態部件,由於靜態成員在程序運行的開始時被初始化,和A的值:: a在嘗試初始化B :: b和C :: c時不可用,因此出現分段錯誤。

我能做些什麼來解決這個設計問題?

回答

3

我建議使用一個單獨的函數來獲取一個字符串執行初始化,避免初始化順序的悲劇:

const std::string initialize() { 
    static const std::string initializer = "meow"; 
    return initializer; 
} 

那麼你可以像下面這樣做初始化:

class A { 
    public: 
     static const std::string a; 
}; 

const std::string A::a = initialize();