最近在项目中,编写了一个 ini 文件的操作类,在被其他代码引用的过程中,总是会出现链接错误,即 error LNK2005 already defined in .obj ,记得最开始写 C++ 代码时,也出现过这种错误,经过网络资料,最后还是顺利的解决了,但是这次的情况和以前有些不同,应该不算是这类错误的典型,后来经过尝试,解决了这个问题。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

       首先 ,介绍下一般典型的发生该错误的情况及解决办法。以下内容摘自网络,网址为 http://hi.baidu.com/3512/blog/item/d568bc<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />340c002cb4d0a2d3d6.html

       程序是如下形状:一个头文件 .h ,一个主函数 .cpp ,一个操作函数 .cpp 。操作函数包含头文件,然后主函数包含操作函数 .cpp 。运行时就会出现该错误。

解决方案一

把主函数所包含的操作函数 .cpp ,改为头文件 .h ,然后就可以解决如上错误。

解决方案二

重新打开编译器,重新打开刚才的文件,先打开主函数 .cpp ,然后编译运行,打开 Fileview ,其中有一个 external dependencies ,把头文件 .h ,和操作函数 .cpp 添加到这里,这样再编译运行主函数 .cpp ,程序运行成功!

       其次 ,说说本人遇到这个错误的代码情况。该 ini 的操作类中包含了两个模板函数,所以将所有的成员函数就放到了头文件 .h 当中,被引用时只要包含该头文件就可以了,即 #include “***.h” ,但是当在多个地方这样操作的时候,就会出现上面的错误。其实本质上,本人的情况也和上述一致,只是形式发生了一些变化,所以上面介绍的解决方法就有些不够全面了,这里给予补充一下。

       解决方案

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