单例模式中 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