C ++私有静态成员变量

时间:2013-09-23 23:10:51

标签: c++ linker-errors static-methods static-members

此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"原因。上述代码中导致链接器错误的原因是什么?

2 个答案:

答案 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;