1樓:果建翼
這個是初學者常見問題了。
簡而言之,目前絕大多數c++編譯器不支援將模版類/模版函式的宣告與實現分開。
所以你要寫就全部一起寫在 .h 標頭檔案中,不要分開寫到 .h 和 .cpp 個檔案中。
編譯器是以cpp檔案為單位來生成目標檔案的,在編譯階段多個cpp的編譯是獨立的。而對於模版,編譯器的做法是,如果有人用到它,才進行例項化,如果沒人用到它,就無視。
這樣,你在ptr.cpp裡面定義了模版類的成員函式實體,但編譯器在編譯ptr.cpp的時候,只看到了模版函式,沒看到有人用它,所以不會進行任何例項化,也不會生成這個函式的目標**。
在main.cpp中,編譯器看到了你使用了這個函式,但沒看到它的定義,所以也無法進行例項化。這樣生成的兩個obj檔案中都沒有這個函式的目標**,於是在最後的連結階段,就找不到這個函式了。
就會報出 「無法解析的外部符號" 這個錯誤。
這個是c++的一個老頑固問題了,雖然c++標準有規定通過export關鍵字來實現模版的分離編譯,但是因為實現過於複雜,實際上幾乎沒有編譯器鳥它。vc、bc、gcc都不支援。(貌似只有icc部分支援)
所以你也只能向現實妥協了呵呵,就像stl一樣,把模版函式和模版類的實現全部寫在.h標頭檔案中吧。
2樓:匿名使用者
把實現放到標頭檔案中,少有編譯器支援c++模板的分離編譯
3樓:匿名使用者
你是用的vs2010?
請教有關c語言的問題,請教一個有關C語言的問題
註釋一是幫助自己記憶設計程式時的思路,以備以後修改 一是在別人讀取你的程式時能讀懂。這個是利己利他的一項工作。如果程式中有比較重要的介面呼叫規則 複雜的演算法 重要的分支 容易混淆等情況時,可以加上一些註釋實現上述功能。如果這個程式是要公用的話,就更要新增必要的註釋來幫助別人理解程式 少範錯誤 避免...
C語言基礎問題,一個C語言基礎問題。。。
補充一點 兄弟,你是才入門學c語言的吧 我給你一個忠實的建議 學語言千萬不要在不值得的細節去扣 比如 i的問題 一般高手是不會寫出很難懂的語句 好的語言 可讀性 是很重要的 的確,有的時候高手也會被一些邏輯問題搞錯了,上機實踐是最好的確認方法 下面的分析真的錯了,因為for迴圈語句在意義上相當於我分...
考研問題請教,請教一個問題
如果真的想拿一個研究生證的話,可以直接考本部院校。還有就是和你選擇的專業有關係,看你本部院校的專業是不是強項專業。這樣就好了啊 有考研的學長學姐嗎,請教一個問題 建議你可以在群裡面或是貼吧上面直接寫出你的問題,看到的學長學姐一定會回答你的。有很多啊,你最好把你的專業,想要報考的學校都說一下,大家才好...