读书人

求高手解决模板二义性有关问题

发布时间: 2012-03-27 13:44:24 作者: rapoo

求高手解决模板二义性问题
#include <string.h>
#include <iostream.h>


template <class T>
T& Sum(T a[],int size)
{
T sum=0;
for(int i=0;i <size;i++)
{
sum=sum+a[i];
}
return sum;
}
char* Sum(char* b,int size)
{
*(b+size)= '\0 ';
return b;
}
char *Sum(char **b,int size)
{
char *tmp=new char[30];
for(int i=0;i <size;i++)
{
strcat(tmp,*(b+i));
}
return tmp;
}
int main(int argc, char* argv[])
{
double a[]={23.556,45.65,34.67};
char *b=new char[20];
for(int i=0;i <20;i++)
{
b[i]=65+i;
}
cout < <Sum(a,3) < <endl;
cout < <Sum(b,10) < <endl;
return 0;
}

[解决办法]
啥错?啥编译器?
[解决办法]
VC6还是早点扔了吧。
template <class T>
T Sum(T a[],int size)
其它不用改,虽然设计这么一组sum是很不合理的。
[解决办法]
扔了VC6,换vc2005
没错!
[解决办法]
lz代码用gcc可以直接编译过去
但有两个警告.
[解决办法]
使用模板特化
将其他版本的SUM定义成特化模板函数,例如:
template <>
char* Sum <char*> (char* b,int size)
{
*(b+size)= '\0 ';
return b;
}

读书人网 >C++

热点推荐