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

c++函数模版的问题

paulhf 发布于 2011-12-05 13:48, 601 次点击
程序代码:
#include<iostream>
using namespace std;
template <class Any>
void swap(Any &a,Any &b);

int main()
{
    int a=9,b=0;
    swap(a,b);
    cout << a << b;
    return 0;
}

template <class Any>
void swap(Any &a,Any &b)
{
    Any t;
    t=a;
    a=b;
    b=t;
}


在ubuntu下用g++编译的时候提示“调用重载的'swap(int&,int&)'函数有歧义,我百思不得其解,请高手指教!
4 回复
#2
rjsp2011-12-05 15:22
因为标准库中也有一个叫swap的函数
int main()
{
    int a=9,b=0;
    swap(a,b); // 要么改为 ::swap(a,b) 以调用全局的swap,就是你在上面写的那个;要么改为 std::swap(a,b) 以调用标准库中的swap
    cout << a << b;
    return 0;
}

但正确的办法还是换个名字,或名字空间
#3
我是菜鸟C2011-12-05 17:46
把template <class Any>
中的any换成T
#4
hxcet2011-12-05 21:53
2L正解!建议把swap函数改名比如swap1
#5
jj74125302011-12-06 00:33
和库函数重名,出现调用二义性
1