C++中使用类模板出现“无法解析的外部符号”问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_40692109/article/details/102766785

在写程序中使用了类模板 template<typename T> 之前运行过程没有什么问题,当我把函数放到另一个编译单元之后出现了“无法解析的外部符号”问题。原因就出在类模板上。

首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件。不同的cpp文件时分开编译的。再由连接器(linker)进行连接成为一个.exe文件。

在类模板所包含的cpp文件中,如果没有对此模板进行实例化的过程,所编译的obj文件没有对类模板进行实例化,主函数的cpp文件也不会对此类模板进行实例化。也就不会生成二进制文件。

解决方法:

  1. 将类的声明和定义放在同一个.h文件中。
  2. 在类模板出现的cpp文件对应的.h文件中include  .cpp文件。
  3. 在主函数所在的main.h中include  .cpp文件。

参考:

更详细

猜你喜欢

转载自blog.csdn.net/qq_40692109/article/details/102766785
今日推荐