模板当中.hpp的由来,解决了什么问题

编写函数模板时,编译遇到的问题:无法解析的外部符号"void _cdel func<int>(int &)"(xxxxx),该符号在_main中被引用。

代码如下:

.h文件的设置

//hppDemo.h

#pragma once
template <typename T>
void func(T &v);

.cpp文件的设置 

//hppDemo.cpp
#include "hppDemo.h"
#include <iostream>
template <typename T>
void func(T &v){
    std::cout << "func" << std::endl;
}

main.cpp文件设置

#include "hppDemo.h"
#include <iostream>
using namespace std;

int main(void)
{
    int data = 20;
    func(data);

    system("pause");
    return 0;
}

模板实例化取决于编译器能否找到可用代码来创建特例(成为实例化要素)。

要创建特例,编译器不但要看到模板的声明,还要看到模板的定义。

模板实例化过程时迟钝的,即只能用函数的定义来实现实例化。

 

main()当中的func(data)实际上时进行模板实例化,即变成了func<int>(data)。我们知道实例化的要素,即可用代码在hppDemo.cpp文件中。但是在编译hppDemo.cpp时,编译器可以解析模板定义并检查语法,但不能生成成员函数的代码。它无法生成代码,因为要生成代码需要知道模板参数,即需要值啊都一个类型,而不是模板本省。

链接程序在main.cpp和hppDemo.cpp中找不到func<int>(data)的定义,于是报这样的错。

讲模板的定义和声明都写在.hpp文件中,在main.cpp中引入这个.hpp就可以了。

.hpp文件是c++中默认模板实现文件。

资料查找连接:http://www.360doc.com/content/12/1205/19/9200790_252334603.shtml

https://blog.csdn.net/weixin_30896657/article/details/97250582

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值