今天使用模板类创建双向循环链表时碰到了一个大坑。按照一般思维,将类的声明放在.h文件中,将函数功能的实现及定义放在.cpp文件中。代码编写完成后调试,却碰到了undefined reference to...(在VS中报错无法解析的外部符号...)
在网上查了半天才知道,原来是模板类的问题。对于普通的类,即使声明和定义分别位于.h和.cpp文件,在main.cpp中只需要把类的头文件用#include
命令包含就行了;但对于模板类,由于模板类的实现不是函数,因此cpp执行文件不能单独编译。也就是说,编译器不能通过h头文件来找到并且编译对应的cpp执行文件。
解决办法有两种:
1. 把模板类的定义也放在头文件中,见代码中Vector.h部分被注释的代码段
2. 如果实在想把模板类的声明和定义(实现)分开,则需要在main.cpp中用#include
命令将模板类的cpp文件包含进来