静态成员变量初始化问题。关于 error LNK2005 static int:已经在***.obj中定义
来源:互联网 发布:数据接口的功能 编辑:程序博客网 时间:2024/05/22 13:00
这两天一直做C++的内容,我在一个类里使用了一个静态成员函数,但是在使用的时候总是报错
比如这样子
错误 1 error LNK2005: "public: static int c1::i" (?i@c1@@2HA) 已经在 c1.obj 中定义
根据我在网上查资料,主要原因有以下三种:
1.重复定义全局变量。
2.头文件的包含重复。
3.使用第三方的库造成的。
但是我的原因不属于刚才所提到的三种,我的程序代码并没有太多了.h文件,也没有复杂的包含关系。
大家都知道,在类里定义静态对象的时候,必须立刻在类外初始化,否则就会报错。给大家举个例子。
c2类是c1类的子类,如下:
c1.h
c1.cppc2.h
c2.cpp我在c1.h后面立刻对静态变量i进行初始化,生成解决方案,然后报错
错误 1 error LNK2005: "public: static int c1::i" (?i@c1@@2HA) 已经在 c1.obj 中定义
错误 2 error LNK1169: 找到一个或多个多重定义的符号
只要两个或者以上的.cpp同时包含了一个定义了变量的.h文件,就会提示错误.
在网上查资料以后,在这里找到了答案,http://akheyun.blog.163.com/blog/static/138249276201062221452697/
有1.cpp和2.cpp, 1.cpp包含1.h, 2.cpp只包含2.h 但是2.h包含了1.h.. 所以1.h中定义的变量编译的时候会在2.cpp中有定义. 于是乎2.cpp翻译成的obj里也会有定义, 结果导致提示obj里重定义。
因此,我们要做的就是,不要在.h里面初始化静态成员变量,初始化静态变量的工作放到.cpp里面去完成
像这样就好了。
c1.cpp
- 静态成员变量初始化问题。关于 error LNK2005 static int:已经在***.obj中定义
- 静态成员变量初始化问题。关于 error LNK2005 static int:已经在***.obj中定义
- 关于VS "error LNK2005: 已经在 .obj 中定义"
- 关于error:LNK2005 已经在*.obj中定义
- error LNK2005 已经在***.obj中定义
- error LNK2005 已经在***.obj中定义
- error:LNK2005 已经在*.obj中定义
- error:LNK2005 已经在*.obj中定义
- error:LNK2005 已经在*.obj中定义
- error:LNK2005 已经在*.obj中定义
- error:LNK2005 已经在*.obj中定义
- error:LNK2005 已经在*.obj中定义
- error:LNK2005 已经在*.obj中定义
- error:LNK2005 已经在*.obj中定义
- error LNK2005: 已经在*.obj中定义
- error:LNK2005 已经在*.obj中定义
- error LNK2005 已经在***.obj中定义
- error LNK2005: 已经在*.obj中定义
- JS面试题——声明提前
- plsql相同变量高亮显示
- Servlet笔记——(3.1)关于HTTPServletResponse详解
- Swing
- bootstrap jquery table 使用中遇到的问题
- 静态成员变量初始化问题。关于 error LNK2005 static int:已经在***.obj中定义
- qt creator 基础篇
- 对于tensorlayer里面的卷积层里面卷积核的理解
- mint ui 使用文档 基于vue.js的移动端ui库
- EditText里的清除按钮
- osgEarth全景图 29. skyview1.earth
- easyui datagrid 获得编辑后的数据
- Easyrecyclerview 使用体验
- html学习记录1