下面这段C++代码用函数模板为什么会报错,有什么问题?

#include<iostream>usingnamespacestd;template<classT>voidfun(Ta[],Tn){inti,j;inttemp;f... #include<iostream>
using namespace std;
template<class T>
void fun(T a[],T n)
{ int i,j;
int temp;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j])
{ temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
int main()
{ int a[10]={35,67,34,42,56,68,72,8,9,15},i;
float b[10]={1.2,3.2,4.5,5.1,6.02,8.88,1.23,4.23,5.6,2.22};
double c[10]={5.55555,1.234,2.34,3.4,5,7.6,8,9.03,2.04,5};
cout<<"未排序前:"<<endl;
for(i=0;i<10;i++)
cout<<a[i]<<" ";
fun(a,10);
cout<<"排序后:"<<endl;
for(i=0;i<10;i++)
cout<<a[i]<<" ";

cout<<"未排序前:"<<endl;
for(i=0;i<10;i++)
cout<<b[i]<<" ";
fun(b,10);
cout<<"排序后:"<<endl;
for(i=0;i<10;i++)
cout<<b[i]<<" ";

cout<<"未排序前:"<<endl;
for(i=0;i<10;i++)
cout<<c[i]<<" ";
fun(c,10);
cout<<"排序后:"<<endl;
for(i=0;i<10;i++)
cout<<c[i]<<" ";
return 0;
}
展开
 我来答
john_lee1969
2014-09-19 · TA获得超过1697个赞
知道小有建树答主
回答量:419
采纳率:100%
帮助的人:520万
展开全部

fun 函数的参数 n,是表示“个数”,其类型应固定为整型,不应“模板化”,而 fun 函数中的局部变量 temp,按上下文的操作逻辑来看,其类型应该是模板化的,你却固定为 int。

 

改成这样:

template<class T>
void fun(T a[],int n)
{
  int i,j;
  T temp;
  for(i=0;i<n-1;i++)
    for(j=i+1;j<n;j++)
       if(a[i]>a[j]) {
          temp=a[i];
          a[i]=a[j];
          a[j]=temp;
       }
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式