C++函数模板问题

如下:
#include<iostream>
using namespace std;
template <class AA>
AA swap (AA x,AA y) //定义互换值的函数模板
{
AA temp =x;
x=y;
y=temp;
}
template<class AA> //定义比较大小的函数模板
AA max(AA x,AA y)
{
return (x>y)?x:y;
}
template<class Mytype> //定义排序的函数模板
Mytype sort(Mytype *MyArray, int size)
{
for(int i=1;i<size;i++)
for(int j=0;j<size-1;j++)
if(max(MyArray[j],MyArray[j+i])==MyArray[j])
swap(MyArray[j],MyArray[j+1]); //此处出错,说是模拟两可的重载函数
}
template <class AA>
void print(AA *MyArray,int size)
{
for(int i=0;i<size;i++)
cout<<" "<<MyArray[i];
cout<<endl;
}
void main()
{
int myarray[5]={23,56,45,85,62};
sort(myarray,5);
print(myarray,5);
return;
}
就是上面那句出错
swap(MyArray[j],MyArray[j+1]); //此处出错,说是模拟两可的重载函数
咋会模拟两可呢?想不明白
前面的max函数调用也是这样的啊,没有出错
望详细讲解一下
谢谢!

在MAX和SWAP前面加上“::”操作符。这是由于在命名空间std中存在相同的函数。
另外你的AA swap (AA x,AA y)无法交换数值,你应当用引用传递参数
AA swap (AA &x,AA &y);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-08-19
把max改成myMax,swap改成mySwap即可
似乎是和iostream中的相关模板冲突
第2个回答  2009-08-19
swap函数在std::里面已经有定义 换个函数名即可 或者去掉using namespace std;
第3个回答  2009-08-19
首先, 这是C++, 而using namespace是C#里的

然后swap, max都是已有的程序, 这里名称重复了.

第三, 如果想用自定义的程序, 可以试试

AA temp;
temp.swap(....) temp.max(....)

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网