不能将模版类的定义与实现分别写在header文件和cpp文件中

环境参数

  • macOS 10.13.3

  • clion 2017.3

  • cmake 3.9


起因

在编写cpp程序时将一个模版类的定义写在了header文件中,而其方法的实现写在了另一份cpp文件中,结果使用IDE运行时报错,“Undefined symbols for architerture x86_64: ……“ 大意是无法找到对象的方法,如下图:

不能将模版类的定义与实现分别写在header文件和cpp文件中_第1张图片


原因

在网上到处搜资料,最后终于找到原因了:不可以将模版类的定义与实现写在不同的文件当中,原因如下:

  • 1# template(模版)并不是一个类或者方法。 template 的作用是提供给编译器生成类或方法的一个模式(pattern)。

  • 2# 为了可以让编译器正确成相应的代码,必须有模版的定义(并不仅仅是声明,也就是不仅仅是header文件中的方法声明,还要有cpp文件中方法的具体实现)以及具体向模版中填充的类型(比如int),二者缺一不可。

  • 3# 你的编译器不会在编译一份文件的同时记得另一份文件的内容。BTW将

你可能感兴趣的:(c++)