加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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文件中进行引用即可。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读