Log日志类的静态成员需类外初始化


在写一个日志类,单例模式(保证一个类只有一个实例存在)

单例模式有三个关键点:

1. 私有的静态实例对象 private static instance

  (创建一个实例对象类内部使用)(PS:实例对象为什么要静态?类的静态成员变量是类共享的成员,且静态方法不能访问非静态成员变量)

2. 私有的构造函数 private Singleton()

  (保证在该类外部,无法通过new的方式创建对象实例)

3. 公有的静态访问实例对象的方法 public static Singleton getInstance()

  (对外部提供该对象的访问方法)

class Log {
private:
	Log();
	Log(Log const&);
	Log& operator=(const Log &);
	static Log* m_instance;
public:
	static Log * getInstance(){
		if (m_instance == NULL)
		{
			m_instance = new Log();
		}
		return m_instance;
	}
	static void msglog(char const *buf); 
};
声明私有的静态的实例对象,private static Log*m_instance;

编译出现错误:

error LNK2001: 无法解析的外部符号 "private: static class Log * Log::m_instance" (?m_instance@Log@@0PAV1@A)

查了下资料是静态成员变量m_instance没有定义。

在类中,只声明了静态成员变量,并没有定义。声明只是表明了变量的数据类型和属性,并不分配内存,定义则需要分配内存。静态成员变量没有定义,没有分配内存,就不能访问。

所以类的静态成员变量必须在类外进行初始化。

Log*Log::m_instance = NULL;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值