问题:类模板的成员函数是在调用时才被创建,导致分文件编写时调用不到。
解决:
1.直接包含cpp文件
2.将声明和实现写到同一个文件中,并更该后缀名为.hpp,.hpp是约定的名字,并不是强制
第一种方式:
头文件:person.h
#include<iostream>using namespace std;template<class T1,class T2>class Person {public: Person(T1 name,T2 age); voID show(); T1 name; T2 age;};
源文件:person.cpp
#include "person.h"template<class T2>Person<T1,T2>::Person(T1 name,T2 age) { this->name = name; this->age = age;}//对于成员函数,需要指明类的参数的代表template<voID Person<T1,1)">::show() { cout << this->name << endl; cout << this->age << endl;}
源文件:test.cpp
第一种方式,直接包含源文件#include "person.cpp" test() { Person<string,1)">int> p(tom",12); p.show();}int main() { test(); system(pause); return 0;}
注意标红的地方,引入的是person.cpp,而不是person.h,因为类模板成员函数是在调用时才创建的,因此在编译阶段引入person.h是找不到声明的实现的。
第二种方式:
头文件:person.hpp
#include<iostream> show(); T1 name; T2 age;};template<第二种方式,将.h和.cpp中的内容写到一起,将后缀名改为.hpp#include person.hpp";}
将类模板的声明和实现都放在.hpp中,并在cpp文件中进行引用即可。
总结以上是内存溢出为你收集整理的c++之类模板分文件编写全部内容,希望文章能够帮你解决c++之类模板分文件编写所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)