C++——模版分文件编写

 学习目标:
      *掌握模版成员函数分文件编写产生的问题以及解决方式
  问题:
      *类模版中成员函数创建时机是在调用阶段,导致分文件编写时连接不到

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();
}

正常得的,我们会将函数声明放在.h,将实现放在.pp 如果我们将函数模版也这样操作,编译器不会报错,但是运行调用模版时会出现找不到链接的错误.

原因:这是因为类模版中的成员函数在调用时才创建,因此当你包含.h时,编译器进入后看到.h的代码后,不会生在你运行的.cpp成函数,然后对于调用的.cpp中的那些模版的函数,编译器也没介绍过,因此编译器不会去找这些函数也不会创建.  

总结:类模版的成员函数一开始是不创建的,所以导致导致编译器看不到.cpp的代码

解决方法一:(较少使用)

//第一解决方式,直接包含源文件
#include"person.cpp"

将包含.h改成.cpp,在调用.cpp时会进入cpp所包含的.h

解决方法二:(常用)

//第二种解决方式,将.h和.cpp中的内容写到一起,将后缀名改为.hpp文件 
#include"person.hpp"//不是必须后缀名,但是约定俗称

将.h和.cpp的东西写在同一个文件里,后缀名改为.hpp,后人看到.hpp为后缀时会默认这是模版文件

.hpp不是强制的,但是是约定俗成

仅个人看视频笔记与理解,如有误可指出谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值