C++经典错误之already defined in .obj解决方法之补充

简介:
 最近在项目中,编写了一个 ini 文件的操作类,在被其他代码引用的过程中,总是会出现链接错误,即 error LNK2005 already defined in .obj ,记得最开始写 C++ 代码时,也出现过这种错误,经过网络资料,最后还是顺利的解决了,但是这次的情况和以前有些不同,应该不算是这类错误的典型,后来经过尝试,解决了这个问题。
        首先 ,介绍下一般典型的发生该错误的情况及解决办法。以下内容摘自网络,网址为 http://hi.baidu.com/3512/blog/item/d568bc340c002cb4d0a2d3d6.html
        程序是如下形状:一个头文件 .h ,一个主函数 .cpp ,一个操作函数 .cpp 。操作函数包含头文件,然后主函数包含操作函数 .cpp 。运行时就会出现该错误。
解决方案一
把主函数所包含的操作函数 .cpp ,改为头文件 .h ,然后就可以解决如上错误。
解决方案二
重新打开编译器,重新打开刚才的文件,先打开主函数 .cpp ,然后编译运行,打开 Fileview ,其中有一个 external dependencies ,把头文件 .h ,和操作函数 .cpp 添加到这里,这样再编译运行主函数 .cpp ,程序运行成功!
        其次 ,说说本人遇到这个错误的代码情况。该 ini 的操作类中包含了两个模板函数,所以将所有的成员函数就放到了头文件 .h 当中,被引用时只要包含该头文件就可以了,即 #include “***.h” ,但是当在多个地方这样操作的时候,就会出现上面的错误。其实本质上,本人的情况也和上述一致,只是形式发生了一些变化,所以上面介绍的解决方法就有些不够全面了,这里给予补充一下。
        解决方案

       添加相应的cpp文件,并将头文件.h中的非模板函数都移到cpp文件,而模板函数的实现都放到文件.h中,这样,当多处引用该头文件的时候,就不会再出现该错误。


本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/643462,如需转载请自行联系原作者

相关文章
|
关系型数据库 MySQL DataX
C++常见gcc编译链接错误解决方法
除非明确说明,本文内容仅针对x86/x86_64的Linux开发环境,有朋友说baidu不到,开个贴记录一下(加粗字体是关键词):用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdynamic”指定链接共享库,使用示例:-Wl,-Bstatic -lmysqlclient_r -lssl -lcrypto -Wl,-Bdynamic -lrt -Wl,-Bdynamic -pthread -Wl,-Bstatic -lgtest("-Wl"表示是传递给链接器ld的参数,而不是编译器gcc/g++的参数。
2580 0
|
关系型数据库 MySQL 数据库
MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取
MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取
376 0
MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取
|
6月前
|
编译器 C语言 C++
c语言中代码运行时发生c++弹窗的解决方法
通过遵循这些步骤,你应该能够解决在C语言代码运行时出现C++弹窗的问题,确保代码在纯C环境中运行。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
63 0
java一个文件只能有一个公有类的解决方法。 用公有静态内部类。 public static。 类似于C++的命令空间。
java一个文件只能有一个公有类的解决方法。 用公有静态内部类。 public static。 类似于C++的命令空间。
|
网络协议 C# C++
关于 C#调用一个C/C++dll库运行时实现多个应用(静态变量区分) 的解决方法
关于 C#调用一个C/C++dll库运行时实现多个应用(静态变量区分) 的解决方法
关于 C#调用一个C/C++dll库运行时实现多个应用(静态变量区分) 的解决方法
|
编译器 Linux C语言
关于 QtCreartor编写纯C++程序调用不到C++某些标准库和枚举以及运行错误 的解决方法
关于 QtCreartor编写纯C++程序调用不到C++某些标准库和枚举以及运行错误 的解决方法
关于 QtCreartor编写纯C++程序调用不到C++某些标准库和枚举以及运行错误 的解决方法
|
关系型数据库 MySQL DataX
C/C++常见gcc编译链接错误解决方法
用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdynamic”指定链接共享库,使用示例: -Wl,-Bstatic -lmysqlclient_r -lssl -lcrypto -Wl,-Bdynamic -lrt -Wl,-Bdynamic -pthread -Wl,-Bstatic -lgtest ("-Wl"表示是传递给链接器ld的参数,而不是编译器gcc/g++的参数。
3858 0
|
Windows
使用vs2010编写c++Win32 Console Project时会出“error LNK1123” 错误解决方法
终极解决方案:VS2010在经历一些更新后,建立Win32 Console Project时会出“error LNK1123” 错误, 解决方案为 将 项目|项目属性|配置属性|清单工具|输入和输出|嵌入清单 “是”改为“否”即可,但是每新建一个项目都要这样设置一次,很麻烦 在建立VS2010 Win32 Project项目时,按照上面解决方案依然发生了“error LNK1123”错误,经过上网查资料,解决方案为: 第一步:与上相同。
1139 0
vc++ 2008 设置断点无效解决方法
主要是通过重新格式化源文件解决问题:即在VS2008中先将源文件打开,并将内容全选,然后在菜单 “编辑”-“高级”-“设置选定内容的格式”。
807 0