2020年7月10日
单例模式中 undefined reference to `XXX’ 的解决方法
问题简述
近来 C++ 用到单例模式,(单例模式是啥不说了,网上大把的资料),结果编译的时候遇到 undefined reference to `XXX’ XXX 是单例模式中的那个静态私有指针。结果是由于变量没有初始化引起。虽然解决之后听起来很小白,但着实用了很多时间,所以决定做个记录。
来龙去脉
写了个单例模式,大概这样
//Single.h class Single() { public: static Single * GetInstance(); private: static Single * instance; Single() {}; }
//Single.cc Single* Single::GetInstance() { if (instance == NULL) { instance = new Single(); } return instance; }
其他部分略去不表,结果编译时报错
undefined reference to `instance’
百思不得其解啊,怎么能找不到呢,很清楚的声明了啊
声明 != 定义
声明:是的名字为程序所知
定义:负责创建与名字关联的实体(摘自 C++ primer)
按照字面意思理解似乎声明完了就不应该报 undefine reference 错才对,但考虑到程序在定义是才给变量分配内存,所以理解为指向类实例的指针只有定义过了才能使用
解决方法
这就很简单了,在 Single.cc 中加上
Single* Single::instance = NULL;
也就是定义 instance 变量就行。不要怀疑,private 类型的 static 变量也可以这么定义。 static 变量其实不属于任何类。
————————————————
版权声明:本文为CSDN博主「zha02」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/personmy/java/article/details/17676123