C++学习记录-模板-类模板分文件编写
一、
类模板使用分文件编写时,由于类模板的成员函数创建时机是在调用阶段,会导致分文件链接不到
解决方法:
- 直接包含.cpp文件
- 将类模板的声明和实现写在同一个文件,命名为”.hpp“(约定俗成的),并且包含
二、示例:
创建一个头文件:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #pragma once #include<iostream> using namespace std;
template<class T1> class chara {
public: T1 name;
public: chara(T1 nam); };
|
创建一个.cpp文件:
1 2 3 4 5 6 7 8
| #include"chara.h"
template<class T1> chara<T1>::chara(T1 nam) { name = nam; cout << name << endl; }
|
在main文件中包含:
1 2 3 4 5 6 7 8 9 10 11 12
| #include<iostream> #include<string> #include"chara.h"
using namespace std;
int main() { chara<string> p("王大锤");
return 0; }
|
此时运行会报错:

解决方法1:直接包含.cpp文件
1 2 3 4 5 6 7 8 9 10 11 12
| #include<iostream> #include<string> #include"chara.cpp" using namespace std;
int main() { chara<string> p("王大锤");
return 0; }
|
解决方法2:将类模板的声明和实现写在同一个文件,命名为”.hpp“(约定俗成的),并且包含
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #pragma once #include<iostream> using namespace std;
template<class T1> class chara { public: T1 name; public: chara(T1 nam); };
template<class T1> chara<T1>::chara(T1 nam) { name = nam; cout << name << endl; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include<iostream> #include<string> #include"chara.hpp"
using namespace std;
int main() { chara<string> p("王大锤");
return 0; }
|