Lee*_*ton 9 c++ static static-members
我知道你通常在.cpp文件中初始化一个静态成员变量.但我的问题是:为什么你有什么?
这是一个例子:
#include <vector>
using namespace std;
class A {
public:
static vector<int> x;
};
main() {
int sz = A::x.size();
}
Run Code Online (Sandbox Code Playgroud)
这给出了编译器错误: undefined reference to 'A::x'
但是,这个:
#include <vector>
using namespace std;
class A {
public:
static vector<int> x;
};
// Initialize static member
vector<int> A::x;
main() {
int sz = A::x.size();
}
Run Code Online (Sandbox Code Playgroud)
编译并运行良好.
我能理解我是否使用默认构造函数之外的其他东西来初始化向量,但我不是.我只想创建一个大小为0的向量.当然,任何静态成员都必须在程序初始化时分配内存,那么编译器为什么不使用默认构造函数呢?
Kla*_*aim 16
这不是关于初始化,而是关于定义.或者更确切地说:它是关于知道哪个编译单元(.cpp)将保存对象(必须唯一定义的某个地方)
所以,需要的是简单地将定义放在某个地方,在一个独特的地方,即cpp,让编译器知道当调用类的静态对象时,它在那里定义,而不是在其他地方定义.(如果您尝试在标题中定义静态,则每个包含此标题的cpp将具有定义,无法知道应在何处定义 - 并且如果您需要使用它,则手动初始化).