c++之类模板分文件编写
发布时间:2020-12-16 09:06:38 所属栏目:百科 来源:网络整理
导读:问题 :类模板的成员函数是在调用时才被创建,导致分文件编写时调用不到。 解决 : 1.直接包含cpp文件 2.将声明和实现写到同一个文件中,并更该后缀名为.hpp,.hpp是约定的名字,并不是强制 第一种方式 : 头文件:person.h #includeiostream using namespac
问题:类模板的成员函数是在调用时才被创建,导致分文件编写时调用不到。 解决: 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文件中进行引用即可。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |