环境参数
macOS 10.13.3
clion 2017.3
cmake 3.9
起因
在编写cpp程序时将一个模版类的定义写在了header文件中,而其方法的实现写在了另一份cpp文件中,结果使用IDE运行时报错,“Undefined symbols for architerture x86_64: ……“ 大意是无法找到对象的方法,如下图:
原因
在网上到处搜资料,最后终于找到原因了:不可以将模版类的定义与实现写在不同的文件当中,原因如下:
1#
template
(模版)并不是一个类或者方法。template
的作用是提供给编译器生成类或方法的一个模式(pattern)。2# 为了可以让编译器正确成相应的代码,必须有模版的定义(并不仅仅是声明,也就是不仅仅是header文件中的方法声明,还要有cpp文件中方法的具体实现)以及具体向模版中填充的类型(比如int),二者缺一不可。
3# 你的编译器不会在编译一份文件的同时记得另一份文件的内容。BTW将