C++学习记录-模板-类模板分文件编写

一、

类模板使用分文件编写时,由于类模板的成员函数创建时机是在调用阶段,会导致分文件链接不到

解决方法:

  1. 直接包含.cpp文件
  2. 将类模板的声明和实现写在同一个文件,命名为”.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;
}