2017-05-30 128 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();