问题
This C++ code is producing linker errors at compile time:
// 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();
}
Moving the vector declaration into the cpp file works. However I want to understand the linker error "Undefined symbols"
cause in the above code. What is causing the linker error in the above code?
回答1:
Static members have to be defined in a compilation unit:
// A.cpp
vector<int> A::v;
回答2:
// 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();
}
来源:https://stackoverflow.com/questions/18970384/c-private-static-member-variables