对c ++静态字段的未定义引用

时间:2019-01-23 14:10:28

标签: c++

看看这个非常基本的c ++类:

class MyClass {
 public:
  static std::map<int, std::string> test;

  void method1()
  {
     std::cout << test[1] << std::endl;
  }
};

int main()
{
    MyClass::test[1]="test";  

    return 0;
}

如您所见,这个非常基本的类包含一个静态字段。 但是当我尝试访问它时,出现此编译器错误:

undefined reference to `MyClass::test[abi:cxx11]'

为了使其工作,我尝试创建一个静态方法并在此方法内声明我的静态字段。 它可以工作,但是看起来很丑。 我想了解为什么我的第一个代码不起作用以及为什么第二个代码起作用...

class MyClass {
 public:
  static std::map<int, std::string>  get_test()
  {
    static std::map<int, std::string> test;
    return test;
  }

  void method1()
  {
     std::cout << get_test()[1] << std::endl;
  }
};

int main()
{
    MyClass::get_test()[1]="test";

    return 0;
}

谢谢

0 个答案:

没有答案