今天使用模板類創建雙向循環鏈表時碰到了一個大坑。按照一般思維,將類的聲明放在.h文件中,將函數功能的實現及定義放在.cpp文件中。代碼編寫完成後調試,卻碰到了undefined reference to...(在VS中報錯無法解析的外部符號...)
在網上查了半天才知道,原來是模板類的問題。對於普通的類,即使聲明和定義分別位於.h和.cpp文件,在main.cpp中只需要把類的頭文件用#include
命令包含就行了;但對於模板類,由於模板類的實現不是函數,因此cpp執行文件不能單獨編譯。也就是說,編譯器不能通過h頭文件來找到並且編譯對應的cpp執行文件。
解決辦法有兩種:
1. 把模板類的定義也放在頭文件中,見代碼中Vector.h部分被註釋的代碼段
2. 如果實在想把模板類的聲明和定義(實現)分開,則需要在main.cpp中用#include
命令將模板類的cpp文件包含進來