程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++經典錯誤之already defined in .obj解決方法之補充

C++經典錯誤之already defined in .obj解決方法之補充

編輯:C++入門知識

最近在項目中,編寫了一個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中,這樣,當多處引用該頭文件的時候,就不會再出現該錯誤。
本文出自 “飛雪待劍” 博客

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved