使用函数模板时,出现没有与参数列表匹配的函数模板实例错误的解决方法

先看以下代码:

代码介绍:这里是想编写一个能查找数组中某一个数的函数模板,template<>尖括号里的参数表里有三个参数,T1代表数组类型,T2代表数组中元素个数n的类型。考虑到需要查找的数可能与以上的T1,T2类型不同,故增加了T3代表需要查找数的类型。

#include <iostream> 
using namespace std;
template<typename T1, typename T2, typename T3>
void chazhao(T1 b[], T2 m) {
	int mark, sign = 0;
	T3 h;                              //需要查找的数不一定与数组中元素类型相同,故增加T3
	cout << "请输入要查找的数" << endl;         
	cin >> h;                                  
	for (int i = 1; i <= m; i++) {
		if (b[i] == h) {
			sign++;
			cout << "该元素位于第" << i << "位" << endl;

		}
	}
	if (sign == 0) cout << "该元素不在该数组中" << endl;
}
int main()
{
	double a[5] = { 0.1,0.2,0.3,0.4,0.5 };
	chazhao(a, 5);                      
}

编译时会出现以下错误:

 问题就出在T3处。在调用函数语句中出现了数组类型参数a,数组长度类型参数5,但没有给出T3的类型,那么编译时编译器就无法知道T3应该是什么类型的参数

函数体中有(T3 h;  cin>>h;) 语句,那么编译器是否能够通过输入的h来推断参数T3的类型呢?

笔者看来:编译器是无法完成这样的参数推断的。

因为通过输入的h,就算编译器能知道h所占的字节数,比如说h占4个字节,但占4个字节的数据类型有float和int等,那么编译器就不知道这个数据的具体存储格式(到底是float还是int)(不同数据存储格式不同),就无法完成参数的推断。

总的来说,在定义函数模板时在template<参数表>中出现的临时参数T1~Tn,均要在调用函数语句中给出其具体的数据类型(或者说都得有实参通过调用语句传进函数体中),未给出具体数据类型的临时参数Tm在函数体中,是无法被推断出数据类型的。


如有错误,希望大家指出!!

对template中的参数推断内容,可在以下链接了解

http:https://www.cnblogs.com/kaycharm/p/13449273.html

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值