problema:
- plantilla llamada a la función miembro de la clase para crear oportunidades en el escenario, lo que lleva a la preparación de la sub-archivo no se puede vincular
Resuelve :
- Solución 1: archivo de origen .cpp que contiene directa
- Solución 2: declarar y poner en práctica escrita en el mismo archivo, y cambiar el .hpp sufijo, nombre de HPP se acuerda, no es obligatorio
person.hpp código:
#pragma once
#include <iostream>
using namespace std;
#include <string>
template<class T1, class T2>
class Person {
public:
Person(T1 name, T2 age);
void showPerson();
public:
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;
}
Escribir código .cpp en puntos archivo de plantilla de clase
#include<iostream>
using namespace std;
//#include "person.h"
#include "person.cpp" //解决方式1,包含cpp源文件
//解决方式2,将声明和实现写到一起,文件后缀名改为.hpp
#include "person.hpp"
void test01()
{
Person<string, int> p("Tom", 10);
p.showPerson();
}
int main() {
test01();
system("pause");
return 0;
}
La segunda solución es la corriente principal, se escribirá con la función miembro de plantilla de clase, y el sufijo de nombre .hpp