错误:
代码:
Person.h
#pragma once#include <iostream>using namespace std;template<class T1,class T2>class Person{private:T1 mName;T2 mAge;public:Person(T1 name, T2 age);void Show();};
Person.cpp
#include "Person.h"template<class T1,class T2>Person<T1, T2>::Person(T1 name, T2 age) {this->mName = name;this->mAge = age;}template<class T1,class T2>void Person<T1, T2>::Show() {cout << "Nmae=" << this->mName << ",Age=" << this->mAge << endl;}
main.cpp
#include "Person.h"void main(void) {Person<string,int> p("aaa", 23);p.Show();}
解决方案:
只需要改变main.cpp头文件。
#include "Person.h"改为#include "Person.cpp"
修改后的main.cpp
#include "Person.cpp"void main(void) {Person<string,int> p("aaa", 23);p.Show();}
结果:
原因:与以下有关。 1.编译器问题; 2.函数模板调用;
因为程序没有生成具体的模板函数Person<string,int>,因此出现链接问题。