模板類出現undefined reference或無法解析的外部符號錯誤

今天使用模板類創建雙向循環鏈表時碰到了一個大坑。按照一般思維,將類的聲明放在.h文件中,將函數功能的實現及定義放在.cpp文件中。代碼編寫完成後調試,卻碰到了undefined reference to...(在VS中報錯無法解析的外部符號...)

在網上查了半天才知道,原來是模板類的問題。對於普通的類,即使聲明和定義分別位於.h和.cpp文件,在main.cpp中只需要把類的頭文件用#include命令包含就行了;但對於模板類,由於模板類的實現不是函數,因此cpp執行文件不能單獨編譯。也就是說,編譯器不能通過h頭文件來找到並且編譯對應的cpp執行文件。

解決辦法有兩種: 
1. 把模板類的定義也放在頭文件中,見代碼中Vector.h部分被註釋的代碼段 
2. 如果實在想把模板類的聲明和定義(實現)分開,則需要在main.cpp中用#include命令將模板類的cpp文件包含進來

參考自使用Dev C++編譯C++工程時出現undefined reference 錯誤

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章