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

新手请教一个函数模板的问题

大大猫 发布于 2011-08-25 08:50, 326 次点击
template <class Any>
void swap(Any &a,Any &b);
void main()
{
    int a=2,b=3;
    swap(a,b);
    cout<<a<<"  "<<b<<endl;
    double c=1.2,d=2.4;
    swap(c,d);
    cout<<c<<"   "<<d<<endl;
}
template<class Any>
void swap(Any &a,Any &b)
{
    Any c;
    c=a;a=b;b=c;
}
为什么提示错误是函数重载调用不明确,怎么改正?谢谢
5 回复
#2
lintaoyn2011-08-25 08:59
template<class Any>
void swap(Any &a,Any &b)
{
    Any c;
    c=a;a=b;b=c;
}

void main()
{
    int a=2,b=3;
    swap(a,b);
    cout<<a<<"  "<<b<<endl;
    double c=1.2,d=2.4;
    swap(c,d);
    cout<<c<<"   "<<d<<endl;
}
先这么改试下,再不行,就把swap这个名字改成别的
#3
大大猫2011-08-25 09:13
可以了,谢谢,把swap改成别的就好了,再请问一下是什么原理呢?为什么不能用swap?谢谢
#4
hahayezhe2011-08-25 09:39
原因 模板不支持分离编译  
#5
lintaoyn2011-08-25 09:57
我手头没编译器,我只是猜测了两种可能,标准库里也有swap(一般iostream里面也会有它的定义,你使用了cout)它的定义可能和你定义的一样,第二种可能是,在使用一个模板函数时编译器要马上看到或者之前已经看到它的定义。
#6
Luminal2011-08-25 14:25
c++中自定义函数或变量时,尤其是涉及类或模板时,最好在函数名或变量名前面加个标识,
比如 MySwap,MyString...这样可以避免许多麻烦!原因楼上的已经解释了!
1