标题:新手请教一个函数模板的问题
只看楼主
大大猫
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2011-8-19
结帖率:81.25%
已结贴  问题点数:10 回复次数:5 
新手请教一个函数模板的问题
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;
}
为什么提示错误是函数重载调用不明确,怎么改正?谢谢
2011-08-25 08:50
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:605
专家分:2489
注 册:2009-4-8
得分:10 
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这个名字改成别的

迭代的是人,递归的是神。
2011-08-25 08:59
大大猫
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2011-8-19
得分:0 
可以了,谢谢,把swap改成别的就好了,再请问一下是什么原理呢?为什么不能用swap?谢谢
2011-08-25 09:13
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
得分:0 
原因 模板不支持分离编译  
2011-08-25 09:39
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:605
专家分:2489
注 册:2009-4-8
得分:0 
我手头没编译器,我只是猜测了两种可能,标准库里也有swap(一般iostream里面也会有它的定义,你使用了cout)它的定义可能和你定义的一样,第二种可能是,在使用一个模板函数时编译器要马上看到或者之前已经看到它的定义。

迭代的是人,递归的是神。
2011-08-25 09:57
Luminal
Rank: 6Rank: 6
等 级:侠之大者
帖 子:140
专家分:470
注 册:2011-8-24
得分:0 
c++中自定义函数或变量时,尤其是涉及类或模板时,最好在函数名或变量名前面加个标识,
比如 MySwap,MyString...这样可以避免许多麻烦!原因楼上的已经解释了!
2011-08-25 14:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-348349-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.871445 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved