C++類模板的聲明和定義為什么要放在同一個文件


不是只能放在.h里面,但是推薦放在.h里面。STL模板實現全部是放在.h里面的。
------------------
編譯能通過。
1)參與編譯的只是.cpp文件,不會報錯的原因,是因為它能在.h里面找到模板的聲明。
鏈接錯誤。
1)鏈接的時候,需要實例化模板,這時候就需要找模板的具體實現了。假設在main函數中調用了一個模板函數,這時候就需要去實例化該類型的模板。注意main函數里面只包含了.h文件,也就是只有模板的聲明,沒有具體實現。就會報錯。
2)而模板的實現.cpp里面,雖然有模板的具體實現,但是沒有誰在該.cpp里面使用一個模板函數,就不會生成一個具體化的實例。
ps:模板是在需要的時候,才會去生成一個具體化的實例的,比如,你只要一個int型的實例,模板就只會給你生成一個int型的實例,模板本身是不會被執行的(也就是模板本身不產生匯編指令),是模板生成的具體化實例才產生指令(這個實例是隱藏的,我們是看不到的)

解決方案:
1)將模板實現寫在.h里面
2)如果你非要寫在.cpp里面,那么請在模板實現的.cpp文件里面(或者.h里面)顯式的實例化一個模板。如果是這樣的話,那模板就沒有太大的意義了,難道你去自己手動實例化所有的實例?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM