2011-08-19 23:00:16標籤:already
defined in .obj;c++;LINK2005;模板函數;模板類 休閑 職場原創作品,允許轉載,轉載時請務必以超連結形式標明文章 原始出處 、作者資訊和本聲明。否則將追究法律責任。http://jazka.blog.51cto.com/809003/643462 最近在項目中,編寫了一個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中,這樣,當多處引用該標頭檔的時候,就不會再出現該錯誤。
本文出自 “飛雪待劍” 部落格,請務必保留此出處http://jazka.blog.51cto.com/809003/643462