C++ 提高教程 -模板 类模板分文件编写

 

第一种解决方式,直接包含源码

 类模板中的成员函数一开始不会创建的,当包含.h的时候,相当于把一下代码给编译器看着了

# include<iostream>
using namespace std;

template<class T1, class T2>
class Person
{
public:
	Person(T1 name, T2 age);
	void showPerson();

	T1 m_Name;
	T2 m_Age;
};

看着代码后,不会生成Person()和showPerson()两个函数,所以最后在链接阶段的时候,两个成员函数找不到,无法链接。如果直接去包含Cpp,相当于让编译器直接去看这段代码,包含.h文件。

# 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;
}

第二种解决方式,将我们的.h和.cpp内容写到一起,将后缀名改为.hpp文件

#pragma once
# include<iostream>
using namespace std;

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

主函数

# include<iostream>
# include"Person.hpp"
using namespace std;

//类模板分文件编写问题及解决
//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;
//}

//类模板中的成员函数一开始不会创建的,当包含.h的时候,
void test01()
{
	Person<string, int>p("Terry",18);
	p.showPerson();
}

int main()
{
	test01();
	system("pause");
	return 0;
}
全部评论

相关推荐

冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司9个岗位
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务