关于C++模板类型,请教

#include"iostream"template<typenamet>tmax5(t&a);usingnamespacestd;intmain(){intb1[5]=... #include "iostream"
template <typename t>
t max5(t&a);
using namespace std;
int main()
{
int b1[5]={1,2,3,4,9};
double b3;
b3=max5(b1);//这里提示没有与参数列表匹配的函数模板
return 0;
}
template <typename t>
t max5(t&a)
{
t b=0;
for(int i=0,i<5,i++)
{
if(a[i]>b)
b=a[i];
}
return b;
}
刚接触模板,有点不明白,求指导
这个函数的意思是比较数组中最大值并返回,
展开
 我来答
sailingzyf
2013-02-20 · TA获得超过1330个赞
知道小有建树答主
回答量:860
采纳率:0%
帮助的人:1059万
展开全部

1、先不说参数匹配,你模板里的for写错了,逗号改成分号。

2、b1是一个int[5]类型的指针,所以模板函数的返回类型也是个指针,指针无法给double类型的b3赋值,也没法转换,所以不匹配。

更改:模板参数的引用换成指针。

更多追问追答
追问
那个FOR的分号打错我纠正了,我现在是这样通过编译的template int max5(t& a,int j)
请问,如果我现在依然要把函数类型换成泛型T的话,其他还有什么需要修改?求指导
追答
能看看你更正之后的代码么,……是不是只能补充一次?
edua_1207
2013-02-20
知道答主
回答量:55
采纳率:0%
帮助的人:28.4万
展开全部
模板就是一个印子,实例化的时候就是套数据类型的。比如你的main函数里面b3=max5(b1)。b1是int型数组,所以,套用模板定义的模板函数,就是这个意思。同理,你也可以定义其他类型的数组或指针进行函数的套用。
模板函数就是将相同功能,不同数据类型的函数写成是一个函数,函数定义时是用抽象数据类型。
模板具有模板函数和模板类。
不知道你是不是这点不明白,希望能帮到你。
追问
这个我了解,不过我是没搞明白,为什么这个函数在b3=max5(b1)这里提示,没有与参数列表相匹配的模板,怎么处理!
追答
你的max5用的是传地址形参,而调用的时候是数组。我这里没有环境。你把数组换成普通变量应该就没有问题了。试试看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飞絮逐尘
2013-02-20 · TA获得超过101个赞
知道小有建树答主
回答量:292
采纳率:0%
帮助的人:119万
展开全部
那就先用int 然后再把所有的int 换成泛型 T ,意思就是T可以指任意某一种统一的类型 比如double,float,short ,int等等……
更多追问追答
追问
还是不行,error C2975: “max5”:“unnamed-parameter”的模板参数无效,应为编译时常量表达式
还是那句没有与参数列表匹配的模板
追答
泛型是一种类型,它也可以是int *
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户

2013-02-20
展开全部
在max5函数中你想做什么?a[i]>b,你要把一个int变量与int*变量作比较?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式