一个VC++问题求教,先谢了
来源:百度知道 编辑:UC知道 时间:2024/07/02 04:16:37
template<class T>
T sum(T a[],int n)
{
T sum=0;
for(int i=0;i<n;i++)
sum+=a[j];
return sum;
}
然后调用:
double a[]={1.111,2.222,3.333,4.444,5.555};
int n=sum(a[5],5);
这就出错,“error C2784: 'T sum(T [],int)' : could not deduce template argument for 'T []' from 'double'”
请高手指点,谢谢!!
T sum(T a[],int n)
{
T sum=0;
for(int i=0;i<n;i++)
sum+=a[j];
return sum;
}
然后调用:
double a[]={1.111,2.222,3.333,4.444,5.555};
int n=sum(a[5],5);
这就出错,“error C2784: 'T sum(T [],int)' : could not deduce template argument for 'T []' from 'double'”
请高手指点,谢谢!!
关键的原因在于:
形参为指针 实参是一个数据元素
形成是T *行,实参为double 型
改进方法 实参a[5] 改为 a 即可
FIMLight 的说法也对
数组下标越界吧 a[]定义的时候只到a[4],没有找到a[5]
#include <iostream>
using namespace std;
template<class T>
T Sum(T a[],int n)
{
T s=0;
for(int i=0;i<n;i++)
s+=a[i];
return s;
}
int main()
{
double a[]={1.111,2.222,3.333,4.444,5.555};
double s=Sum<double>(a,5);
cout<<s<<endl;
return 0;
}
你代码中问题比较多……用模板函数时要记得要指定类型
(GCC编译通过)