类模板分文件编写

问题: 类模板中成员函数创建时机是在调用阶段,导致分文件编写时链接不到

解决:

解决方式1:直接包含.cpp源文件

解决方式2:将声明和实现写到同一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制

普通写法:

#include<iostream>
using namespace std;

//类模板分文件编写的问题以及解决
#include<string>
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;
}

void test()
{
	Person <string, int>p("Jerry", 20);
	p.showPerson();
}


int main()
{
	test();

	return 0;
}

问题:分文件编写中,在类模板分文件编写.cpp中包含person.h头文件仍然出错!

解决方式1:直接包含.cpp源文件

创建person.h添加以下代码:

#pragma once
#include<iostream>
using namespace std;

#include<string>
template<class T1, class T2>
class Person
{
public:
	Person(T1 name, T2 age);
	void showPerson();

	T1 m_Name;
	T2 m_Age;
};

创建person.cpp添加以下代码:     

#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;
}

类模板分文件编写.cpp中:

#include<iostream>
using namespace std;

//第一种解决方式,直接包含源文件
#include "person.cpp"//将这行的#include "person.h"改为#include "person.cpp"

void test()
{
	Person <string, int>p("Jerry", 20);
	p.showPerson();
}

int main()
{
	test();

	return 0;
}

解决方式2:将.h和.cpp中的内容写到一起,将后缀名改为.hpp文件(常用)

创建person.hpp添加以下代码:

#pragma once
#include<iostream>
using namespace std;

#include<string>
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;
}

类模板分文件编写.cpp中:

#include<iostream>
using namespace std;

//包含hpp头文件
#include "person.hpp"

void test()
{
	Person <string, int>p("Jerry", 20);
	p.showPerson();
}

int main()
{
	test();

	return 0;
}

总结:主流的解决方式是第二种,将类模板成员函数写到一起,并将后缀名改为.hpp

相关推荐

  1. 模板文件编写

    2024-03-27 07:02:05       18 阅读
  2. 模板文件编写

    2024-03-27 07:02:05       17 阅读
  3. C++模板文件编写

    2024-03-27 07:02:05       35 阅读
  4. [C++提高编程](二):模板--模板

    2024-03-27 07:02:05       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-27 07:02:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-27 07:02:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-27 07:02:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-27 07:02:05       18 阅读

热门阅读

  1. 3.23Code

    2024-03-27 07:02:05       14 阅读
  2. Hive-技术补充-ANTLR语法编写

    2024-03-27 07:02:05       16 阅读
  3. 力扣每日练习(3.26)

    2024-03-27 07:02:05       17 阅读
  4. python怎样打开一个pdf文件?

    2024-03-27 07:02:05       18 阅读
  5. 将word转为PDF的几种简单方式

    2024-03-27 07:02:05       17 阅读
  6. 【手写AI代码目录】准备发布的教程

    2024-03-27 07:02:05       17 阅读
  7. vue 文件预览(docx、.xlsx、pdf)

    2024-03-27 07:02:05       16 阅读
  8. net core 使用 iTextSharp 生成PDF

    2024-03-27 07:02:05       15 阅读
  9. 触发器的工艺结构原理及选型参数总结

    2024-03-27 07:02:05       18 阅读
  10. 决策树介绍

    2024-03-27 07:02:05       13 阅读
  11. 深入学习Spark SQL:处理结构化数据的利器

    2024-03-27 07:02:05       17 阅读
  12. 决策树-计算信息熵

    2024-03-27 07:02:05       17 阅读
  13. 决策树学习心得

    2024-03-27 07:02:05       16 阅读
  14. Stable Diffusion 本地部署教程

    2024-03-27 07:02:05       20 阅读
  15. 压力测试(QPS)及测试工具Locust

    2024-03-27 07:02:05       17 阅读
  16. Spark SizeTrackingAppendOnlyMap 相关源代码分析

    2024-03-27 07:02:05       16 阅读