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文件的里的模板
并没有看到具体传入的类别,不知道生成什么具体类,所以是未定义的错误
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)