一个晚上都没有解决这个bug,问了个同学才知道。
模板编程时,如果分离编译会造成链接出错,报collect2 error ld returned 1 exit status错误。
解决方案:
1. 实现写到.h文件中,当然这样可能会造成可执行程序过大;
2. 在模板实现文件中实例化一份别的cpp需要用到的模板实例。
原因:
链接器去别的.o文件找实现,模板实现类没有实例化的代码,比如你需要A<int>,而模板实现类.o文件中找不到A<int>的函数入口,所以出错。
具现(instantiations):表示程序将真正的类型和表达式绑定到模板相关形式参数上的操作。也叫做实例化。
在C++中。编译器在看到模板的定义的时候。并不马上产生代码,仅仅有在看到用到模板时,比方调用了模板函数 或者 定义了类模板的
对象的时候。编译器才产生特定类型的代码。
Appendix:
普通的链接出错一般就是找不到实现,或者漏掉了需要链接的目标文件或动态、静态链接库,查找一下即可。
在C++中。编译器在看到模板的定义的时候。并不马上产生代码,仅仅有在看到用到模板时,比方调用了模板函数 或者 定义了类模板的
对象的时候。编译器才产生特定类型的代码。