下面这段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;
} 展开
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;
} 展开
1个回答
展开全部
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;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询