【问题标题】:C++ private static member variablesC++ 私有静态成员变量
【发布时间】:2013-09-23 23:10:50
【问题描述】:

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

【问题讨论】:

  • 您在A.cpp 中缺少v 的定义。

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


【解决方案1】:

静态成员必须在编译单元中定义:

// 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();
    }
    

    【讨论】:

      猜你喜欢
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多