看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) vc 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) none 問題(Question): A.h http://codepad.org/jySlti0c A.cpp http://codepad.org/5IRCfnjn hello.cpp http://codepad.org/qIWGTyXy 為什麼一直出現連結錯誤 錯誤 1 error LNK2019: 無法解析的外部符號 "public: void __thiscall A<int>::print(void)" (?print@?$A@H@@QAEXXZ) 在函式 _main 中被參考 hello.obj hello 錯誤 2 fatal error LNK1120: 1 個無法解析的外部符號 G:\Cpp\hello\Debug\hello.exe hello 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) A.h http://codepad.org/jySlti0c A.cpp http://codepad.org/5IRCfnjn hello.cpp http://codepad.org/qIWGTyXy 補充說明(Supplement): -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.233.222
CumCumCum:把a.cpp的實作移到a.h看看 08/14 14:47
easterday:這樣做可能不好吧...C++的傳統就是表頭和實作分離不是嗎 08/14 14:52
MOONRAKER:對template而言,沒有你所謂的這個傳統。 08/14 15:04
MOONRAKER:直到今年中主要compiler還並不支援這個「傳統」。 08/14 15:09
MOONRAKER:(說「今年中」是客氣,可以直接改成「目前為止」。) 08/14 15:10
mail6543210:template是在編譯期展開成有*用到*的多重版本,所以 08/14 15:13
cuteSquirrel: 相關討論 : http://0rz.tw/HIIUG 08/14 15:14
mail6543210:所以編譯main時必須引入template的*src*;不然無從判 08/14 15:14
mail6543210:斷是否用到 08/14 15:15
azureblaze:"實做分離"是分離別人用不到的實做 08/14 15:33
azureblaze:很不幸的用template必須知道實做細節 08/14 15:33
loveme00835:還有問問題這樣問的 08/15 00:22
loveme00835:"template不是程式碼" 念一百遍, 要給完角括號參數才 08/15 00:24
loveme00835:能具現化出"程式碼", 你可以在.cpp內具現化需要用到的 08/15 00:25
loveme00835:實體, .h留宣告就好. 我關鍵字已經打了自己google 08/15 00:26
freaky:多年以前我曾經為了這個去買Comeau C++,但真的沒必要 08/15 16:52
freaky:實際上template還有其他未被主要compiler正確實作的feature 08/15 16:54
freaky:如果是學術研究還好,工作上不建議花這種時間精力 08/15 16:55
freaky:簡單易懂的程式碼才是王道 08/15 16:58
loveme00835:有必要看一章問一篇嗎? 是不會 google? 08/15 22:53
Caesar08:你可以在A.h最下面加上一行#include"A.cpp" 08/16 00:41
Caesar08:至於export,現在幾乎沒有編譯器支援他 08/16 00:42