C++在写静态变量时容易犯的一个小错误


在A.h头文件里这样定义

#ifndef A_H
#define A_H
class A
{
private:
	A();
	~A();
	static int m_num;
};
int A::m_num;
#endif

结果发现

Error	3	error LNK2005: "private: static int <span style="font-family: Arial, Helvetica, sans-serif;">A</span><span style="font-family: Arial, Helvetica, sans-serif;">::m_num" (?m_num@A@@0HA) already defined in A.obj</span>
Error	4	error LNK1169: one or more multiply defined symbols found

这时可能会很困惑,明明就定义一次,为什么就说多次定义呢?

结果就这么小的一个问题就得浪费你几分钟。

原来在A.cpp文件里导入了A.h头文件

#include "A.h"
而其他文件如main.cpp文件里也导入了A.h头文件,导致了出现多次定义的问题,我就不解了,不是有头文件卫兵吗?但事实就是这样,所以一般有.h文件和.cpp文件的类的static变量的初始化都得放在.cpp文件里初始化,不然会出现多重定义问题,谨记!


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值