How can you define const static std::string in header file?
我有一个类,我想存储一个静态
我试过几种直接的方法1。
1 | const static std::string foo ="bar"; |
代码>
2.
1 2 3 4 5 | const extern std::string foo; //defined at the bottom of the header like so ...//remaining code in header }; //close header class declaration std::string MyClass::foo ="bar" /#endif // MYCLASS_H |
代码>
我也试过了
3.
1 2 3 4 | protected: static std::string foo; public: static std::string getFoo() { return foo; } |
代码>
这些方法因这些原因分别失败:
我希望在头文件而不是源文件中包含声明的原因。这是一个将被扩展的类,它的所有其他函数都是纯虚拟的,所以目前除了这些变量之外,我没有其他的理由拥有一个源文件。
那么,如何做到这一点呢?
一种方法是定义一个方法,该方法内部有一个静态变量。
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class YourClass { public: // Other stuff... const std::string& GetString() { // Initialize the static variable static std::string foo("bar"); return foo; } // Other stuff... }; |
这将只初始化静态字符串一次,对函数的每次调用都将返回对变量的常量引用。对你的目的有用。
只能在整数类型的构造函数中初始化静态常量值,而不能初始化其他类型。
将声明放在标题中:
1 | const static std::string foo; |
并将定义放在.cpp文件中。
1 | const std::string classname::foo ="bar"; |
如果初始化在头文件中,则包含头文件的每个文件都将具有静态成员的定义。当初始化变量的代码将在多个.cpp文件中定义时,将出现链接器错误。