【发布时间】:2016-02-03 20:59:35
【问题描述】:
我知道静态字面量类型成员可以在类定义中初始化,非字面量类型不能。
class Class
{
static const int lt = 0; //OK
static const std::string nlt = "hello"; //compilation error
};
但是,我遇到了一个奇怪的问题,如果 STL 容器中的成员在类定义内部而不是外部进行初始化,我将无法使用它们。
class Class
{
public:
static const int var = 1;
void f();
};
void Class::f() {
std::vector<int> vec;
vec.push_back(var);
}
上面的示例导致链接器错误undefined reference to Class::var 如果我将初始化移到外面,错误就会消失。
const int Class::var = 1;
上面的两个初始化有什么区别?为什么会导致 stl 容器出错?
【问题讨论】: