C++ 提高教程 -模板 类模板分文件编写
Posted 行码阁119
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}
以上是关于C++ 提高教程 -模板 类模板分文件编写的主要内容,如果未能解决你的问题,请参考以下文章