注册 登录
编程论坛 C++教室

函数模板类型转换不成功~~

蜗牛进程 发布于 2009-11-02 20:51, 630 次点击
:\c++程序\zy_8_11\11.cpp(11) : error C2667: 'swap' : none of 2 overload have a best conversion
D:\c++程序\zy_8_11\11.cpp(11) : error C2668: 'swap' : ambiguous call to overloaded function
D:\c++程序\zy_8_11\11.cpp(17) : error C2667: 'swap' : none of 2 overload have a best conversion
D:\c++程序\zy_8_11\11.cpp(17) : error C2668: 'swap' : ambiguous call to overloaded function
Error executing cl.exe.

zy_8_11.exe - 4 error(s), 0 warning(s)


#include <iostream>
template<class Any>
void swap(Any &a,Any &b);
int main()
{
    using namespace std;
    int i=10;
    int j=20;
    cout<<"i,j= "<<i<<" ."<<j<<endl;
    cout<<"using compiler -generated int swapper:\n";
    swap(i,j);
    cout<<"NOw i,j= "<<i<<". "<<j<<"\n";
     
    double x=24.5;
    double y=81.7;
    cout<<"x,y = "<<x<<" ."<<y<<endl;
    swap(x,y);
    cout<<"NOwx,y= "<<x<<" ."<<y<<endl;
    return 0;
}
template<class Any>
void swap(Any& a, Any& b)
{
    Any temp;
        temp=a;
    a=b;
    b=temp;
   
}
5 回复
#2
qlc002009-11-02 23:14
确实如楼下说的,名字重了,改一下就可以了!还有一种方法就是把using namespace std;出掉,头文件变成#include<iostream.h>也可以

[ 本帖最后由 qlc00 于 2009-11-3 17:35 编辑 ]
#3
flyingcloude2009-11-02 23:24
回复 楼主 蜗牛进程
swap改个名字吧,用Swap或者其他。
因为在标准库里已经有swap函数了,所以重名了。
#4
pywepe2009-11-03 12:03
class不用换成typedef

原因是swap重名了
#5
qlc002009-11-03 17:34
看来我记错了,我总是感觉class要在类模板中使用!,但是如果把头文件加.h的话就可以
#6
蜗牛进程2009-11-03 18:24
版主正解~~~我把那个改成大s就编译通过了
1