此C ++代码在编译时生成链接器错误:
// A.h
class A {
public:
static void f();
private:
static std::vector<int> v;
};
// A.cpp
void A::f() {
// this line is causing trouble
int i = v.size();
}
将矢量声明移动到cpp文件中。但是,我想了解上面代码中的链接器错误"Undefined symbols"
原因。上述代码中导致链接器错误的原因是什么?
答案 0 :(得分:3)
// A.h
class A {
public:
static void f();
private:
static std::vector<int> v;
};
// A.cpp
//modify add this line
static std::vector<int> A::v;
void A::f() {
// this line is causing trouble
int i = v.size();
}
答案 1 :(得分:3)
必须在编译单元中定义静态成员:
// A.cpp
vector<int> A::v;