C++模板类的实现需要注意,否则就是undefined reference to

在编写模板类时,不要分头文件和.cpp文件,即不要将定义和实现分成两个文件
统一都写在头文件就好,#include 头文件就可以了
如果分开写的话,会报错
因为你所谓的实现代码,比如某个成员函数,实际上还是一份模板而已,因为开头要加上template <typename T>
编译器要根据实际需要的不同的T类别生成多份函数代码

模板类,实际上是类的实现的一个模板,编译器在看到模板类的代码后,会根据不同类型生成对应类型的代码
因为不同类型,类对象占用内存空间大小也不同
在你传入真实的类型时,就会有一个对应的类代码生成

template <typename T>
class A{
  T t;
};

传入int,则会生成A<int>类的代码
传入char,则会生成A<char>类的代码
这些生成的类实际上都是不同的类

下面模板类的函数实现实际上也仅仅是一份模板,看做一个声明:

template <typename T>
A<T>::A()
{
  //code
}

编译器需要根据特定类型去生成不同的函数
所以模板类的定义以及对应的模板函数实现应该放在一起,即一个.h文件中,而不应该分开

如果分开成.cpp写的话,是由g++去负责编译一个个.cpp模块
这样编译器处理到该cpp的时候,对该cpp也要生成目标文件
但是代码实际上并没有生成,因为仅仅看到了.cpp文件的里的模板
并没有看到具体传入的类别,不知道生成什么具体类,所以是未定义的错误

原文链接: https://www.cnblogs.com/lxzbky/p/16583245.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++模板类的实现需要注意,否则就是undefined reference to

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/399890

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月14日 上午9:37
下一篇 2023年4月14日 上午9:37

相关推荐