我有一个类,我想通过getter存储静态std::string
,它是真正的const或有效的const。
我尝试了几种直接的方法 1.
const static std::string foo = "bar";
2
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
protected:
static std::string foo;
public:
static std::string getFoo() { return foo; }
这些方法分别因以下原因而失败:
const string MyClass::foo
的类内初始化
foo
指定的存储类 - 它似乎不希望将extern
与const
或static
原因我想在标题中而不是源文件中声明。这是一个将被扩展的类,它的所有其他函数都是纯虚拟的,所以我目前没有其他理由比这些变量有源文件。
那怎么办呢?
答案 0 :(得分:15)
一种方法是定义一个在其中包含静态变量的方法。
例如:
class YourClass
{
public:
// Other stuff...
const std::string& GetString()
{
// Initialize the static variable
static std::string foo("bar");
return foo;
}
// Other stuff...
};
这只会初始化静态字符串一次,每次调用该函数都会返回对该变量的常量引用。对你有用。
答案 1 :(得分:12)
您只能在构造函数中为整数类型初始化静态const值,而不是其他类型。
将声明放在标题中:
const static std::string foo;
将定义放在.cpp文件中。
const std::string classname::foo = "bar";
如果初始化在头文件中,那么包含头文件的每个文件都将具有静态成员的定义。将会出现链接器错误,因为初始化变量的代码将在多个.cpp文件中定义。