Initializing static pointer in static class
本问题已经有最佳答案,请猛点这里访问。
所以我有以下C++类
1 2 3 4 5 6 7 8 9 10 11 | class MyClass: public: static void InitObject(); private: static MyObject *myObject; }; |
然后在.cpp文件中
1 2 3 4 | void MyClass::InitObject { myObject = new MyObject(); } |
但是,我得到一个编译器错误,它说"myObject"是从initObject()引用的,然后它说链接器命令失败,退出代码为1。
为什么这个不行?我该怎么修?
由于C++中类的静态数据成员需要与实例内存分开的内存空间,所以除了在类中声明之外,还需要定义它们。
您可以在单独的翻译单元(在CPP文件中)中这样做:
1 | MyObject *MyClass::myObject; |
这个定义告诉编译器在静态内存区域为
扩展.cpp文件,对
1 | MyObject* MyObject::myObject = NULL; |
注:对于您的特定案例,您最好说:
1 2 3 4 5 6 7 8 | class MyClass: { public: static MyClass& instance(); private: MyClass() {} }; |
在.cpp文件中:
1 2 3 4 5 | MyClass& MyClass::instance() { static MyClass myInstance; return myInstance; } |
比起使用
您从未为
1 | MyObject* MyObject::myObject; |