今天在实现类模板实例化的时候遇到一个问题,就是把类模板函数实现放到类的cpp文件中,然后在main函数中使用这个类的时候,就会出现无法解析的外部符号:函数名(xxxx)等错误,那么出现这个错误的原因是什么呢?
原因就是现在的编译里不支持模板函数的申明和实现分开,要像上面那样使用类成员函数,有以下两种方法
- 在使用这个类的文件中包含#include“xxxx.cpp”
- 在类头文件末尾包含模板实现函数’#include"xxxx.cpp"
这两种方法都可以解决上面的问题。
(若编译通过,链接未通过,应该考虑外部链接的情况。从项目的链接,项目的属性设置考虑,而不是从代码本身的角度考虑)
(如果使用VS的IDE可以在右键项目-属性-链接器
的下面着重修改常规-附加库目录-输入-附加依赖项
)
下面我们来说下error2019会在什么时候出现?
- 在使用动态库时候,没有包含相应的lib
解决方案:#pragma comment( lib,“xxxx.lib”);
- 函数只进行了声明而没有进行定义
解决方案:为声明的函数添加函数实现
- 缺少.obj目标文件
解决方案:从新设置文件编译的路径,然后重新编译
博主遇到以上问题的原因是将“xxx.cpp”文件添加进了头文件中,若将对应的cpp文件添加进源文件中则不会出现此类报错。