类模板分文件编写

学习目标:
掌握类模板成员函数分文件编写产生的问题以及解决方式
问题:
类模板中成员函数创建时机是在调用阶段,导致分文件编写时链接不到
解决:
解决方式1:直接包含.cpp源文件
解决方式2:将声明和实现写到同一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制
示例:

#include <iostream>
using namespace std;
//第一种解决方式,直接包含源文件
// #include "person.cpp"
//第二种解决方式,将.h和.cpp中的内容写到一起,将后缀名改为.hpp文件
#include "person.hpp"
// #include <string>
// //类模板分文件编写问题以及解决
// template<class T1,class T2>
// class Person
// {
// public:
// Person(T1 name, T2 age);
// void showPerson();
// T1 m_Name;
// T2 m_Age;
// };
// template<class T1,class T2>
// Person<T1,T2>::Person(T1 name,T2 age)
// {
// this->m_Name=name;
// this->m_Age=age;
// }
// template<class T1,class T2>
// void Person<T1,T2>::showPerson()
// {
// cout<<"姓名:"<<this->m_Name<<"年龄:"<<this->m_Age<<endl;
// }
void test01()
{
Person<string,int>p("Jerry",18);
p.showPerson();
}
int main()
{
test01();
return 0;
}

Person.h->Person.hpp

#pragma once
#include <iostream>
using namespace std;
#include <string>
//类模板分文件编写问题以及解决
template<class T1,class T2>
class Person
{
public:
Person(T1 name, T2 age);
void showPerson();
T1 m_Name;
T2 m_Age;
};
//#include "person.h"
template<class T1,class T2>
Person<T1,T2>::Person(T1 name,T2 age)
{
this->m_Name=name;
this->m_Age=age;
}
template<class T1,class T2>
void Person<T1,T2>::showPerson()
{
cout<<"姓名:"<<this->m_Name<<"年龄:"<<this->m_Age<<endl;
}

将person.cpp中的代码注释移动到person.hpp里

// #include "person.h"
// template<class T1,class T2>
// Person<T1,T2>::Person(T1 name,T2 age)
// {
// this->m_Name=name;
// this->m_Age=age;
// }
// template<class T1,class T2>
// void Person<T1,T2>::showPerson()
// {
// cout<<"姓名:"<<this->m_Name<<"年龄:"<<this->m_Age<<endl;
// }

总结:
主流的解决方式是第二种,将类模板成员函数写到一起,并将后缀名改为.hpp

posted @   Ricky001  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示