网站的开发工具和运行环境,建设工程合同违约金上限,高端个人网站,网站备案证书在哪里下载问题#xff1a; 类模板中成员函数创建时机是在调用阶段#xff0c;导致分文件编写时链接不到
解决#xff1a;
解决方式1#xff1a;直接包含.cpp源文件
解决方式2#xff1a;将声明和实现写到同一个文件中#xff0c;并更改后缀名为.hpp#xff0c;hpp是约定的名称…问题 类模板中成员函数创建时机是在调用阶段导致分文件编写时链接不到
解决
解决方式1直接包含.cpp源文件
解决方式2将声明和实现写到同一个文件中并更改后缀名为.hpphpp是约定的名称并不是强制
普通写法
#includeiostream
using namespace std;//类模板分文件编写的问题以及解决
#includestring
templateclass T1,class T2
class Person
{
public:Person(T1 name, T2 age);void showPerson();T1 m_Name;T2 m_Age;
};templateclass T1,class T2
PersonT1,T2::Person(T1 name, T2 age)
{this-m_Name name;this-m_Age age;
}templateclass T1, class T2
void PersonT1, T2::showPerson()
{cout 姓名 this-m_Name 年龄 this-m_Age endl;
}void test()
{Person string, intp(Jerry, 20);p.showPerson();
}int main()
{test();return 0;
}
问题分文件编写中在类模板分文件编写.cpp中包含person.h头文件仍然出错
解决方式1直接包含.cpp源文件
创建person.h添加以下代码
#pragma once
#includeiostream
using namespace std;#includestring
templateclass T1, class T2
class Person
{
public:Person(T1 name, T2 age);void showPerson();T1 m_Name;T2 m_Age;
};
创建person.cpp添加以下代码
#includeperson.htemplateclass T1,class T2
PersonT1,T2::Person(T1 name, T2 age)
{this-m_Name name;this-m_Age age;
}templateclass T1, class T2
void PersonT1, T2::showPerson()
{cout 姓名 this-m_Name 年龄 this-m_Age endl;
}
类模板分文件编写.cpp中
#includeiostream
using namespace std;//第一种解决方式直接包含源文件
#include person.cpp//将这行的#include person.h改为#include person.cppvoid test()
{Person string, intp(Jerry, 20);p.showPerson();
}int main()
{test();return 0;
}解决方式2将.h和.cpp中的内容写到一起将后缀名改为.hpp文件(常用)
创建person.hpp添加以下代码
#pragma once
#includeiostream
using namespace std;#includestring
templateclass T1, class T2
class Person
{
public:Person(T1 name, T2 age);void showPerson();T1 m_Name;T2 m_Age;
};templateclass T1, class T2
PersonT1, T2::Person(T1 name, T2 age)
{this-m_Name name;this-m_Age age;
}templateclass T1, class T2
void PersonT1, T2::showPerson()
{cout 姓名 this-m_Name 年龄 this-m_Age endl;
}类模板分文件编写.cpp中
#includeiostream
using namespace std;//包含hpp头文件
#include person.hppvoid test()
{Person string, intp(Jerry, 20);p.showPerson();
}int main()
{test();return 0;
}
总结主流的解决方式是第二种将类模板成员函数写到一起并将后缀名改为.hpp