单例模式中 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 变量其实不属于任何类。




  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值