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 数据库
MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取
MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取
325 0
MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取
|
8月前
|
Java C++
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++某些标准库和枚举以及运行错误 的解决方法
vc++ 2008 设置断点无效解决方法
主要是通过重新格式化源文件解决问题:即在VS2008中先将源文件打开,并将内容全选,然后在菜单 “编辑”-“高级”-“设置选定内容的格式”。
790 0
|
5天前
|
编译器 数据安全/隐私保护 C++
c++primer plus 6 读书笔记 第十三章 类继承
c++primer plus 6 读书笔记 第十三章 类继承
|
1天前
|
数据安全/隐私保护 C++
C++ 中的类是一种用户定义的数据类型,用于表示具有相似特征和行为的对象的模板。
C++ 中的类是一种用户定义的数据类型,用于表示具有相似特征和行为的对象的模板。
|
1天前
|
C++
C++ 是一种面向对象的编程语言,它支持对象、类、继承、多态等面向对象的特性
C++ 是一种面向对象的编程语言,它支持对象、类、继承、多态等面向对象的特性
|
4天前
|
编译器 C++
【C++初阶】—— 类和对象 (下)
【C++初阶】—— 类和对象 (下)
8 2