C++在写静态变量时容易犯的一个小错误
2014-10-08 20:41
330 查看
在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>
这时可能会很困惑,明明就定义一次,为什么就说多次定义呢?
结果就这么小的一个问题就得浪费你几分钟。
原来在A.cpp文件里导入了A.h头文件
#include "A.h"而其他文件如main.cpp文件里也导入了A.h头文件,导致了出现多次定义的问题,我就不解了,不是有头文件卫兵吗?但事实就是这样,所以一般有.h文件和.cpp文件的类的static变量的初始化都得放在.cpp文件里初始化,不然会出现多重定义问题,谨记!
#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文件里初始化,不然会出现多重定义问题,谨记!
相关文章推荐
- C/C++一个容易犯的低级错误--分号引起的错误
- 一个容易犯的错误
- 使用JNDI的一个容易忽略的错误
- c++一个析构的时候的释放内存错误
- C++编程人员容易犯的10个C#错误——C++培训(三)
- C++编程人员容易犯的10个C#错误——C++培训(二)
- C++编程人员容易犯的10个C#错误
- 容易错误的一个初始化
- C++编程人员容易犯的10个C#错误
- C++程序员容易犯的十个C#错误
- C++用C程序的一个链接错误
- 使用JNDI的一个容易忽略的错误
- 一个C/C++程序员最容易犯的错误!
- C++编程人员容易犯的10个C#错误
- C++编程人员容易犯的10个C#错误
- 使用makefile和不使用makefile时,容易犯的一个错误。
- C++编程人员容易犯的10个C#错误
- C++编程人员容易犯的10个C#错误
- C++编程人员容易犯的10个C#错误
- 【转载】转自一个讨论组,容易犯的错误,留下警示自己