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

來源:互聯網
上載者:User
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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.