C++通用编程(函数模板)在vc++6.0环境下的运行问题

#include<iostream>template<classAny>voidswap(Any&a,Any&b);//模板函数原型intmain(){usingname... #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;
swap(i,j);//此调用将会生成模板函数的int版本
cout<<"Now i,j="<<i<<','<<j<<endl;
double x=1.2;
double y=2.3;
cout<<"x,y="<<x<<','<<y<<endl;
swap(x,y);//此调用会生成模板函数的double版本
cout<<"Now x,y="<<x<<','<<y<<endl;
return 0;
}
template<class Any>
void swap(Any &a,Any &b)
{
Any temp;
temp=a;
a=b;
b=temp;
}
我很奇怪啊,为什么运行不了,应该是没错了,是不是vc6.0对函数模板的支持有问题?另附:
=====================================================
C:\Program Files\Microsoft Visual Studio\MyProjects\程序文本\8.11.cpp(14) : error C2667: 'swap' : none of 2 overload have a best conversion
C:\Program Files\Microsoft Visual Studio\MyProjects\程序文本\8.11.cpp(14) : error C2668: 'swap' : ambiguous call to overloaded function
C:\Program Files\Microsoft Visual Studio\MyProjects\程序文本\8.11.cpp(19) : error C2667: 'swap' : none of 2 overload have a best conversion
C:\Program Files\Microsoft Visual Studio\MyProjects\程序文本\8.11.cpp(19) : error C2668: 'swap' : ambiguous call to overloaded function
执行 cl.exe 时出错.
展开
 我来答
friday_collin
2012-07-14 · TA获得超过415个赞
知道小有建树答主
回答量:466
采纳率:100%
帮助的人:334万
展开全部
把你的swap函数名改一下,可能和某些已经存在的函数冲突了。
改为MySwap就好了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
董俊锟djk
2012-07-14 · TA获得超过2550个赞
知道小有建树答主
回答量:1231
采纳率:66%
帮助的人:1001万
展开全部
#include<iostream>
using namespace std;
template<class Any>
void swap(Any *a,Any *b);//模板函数原型
int main()
{
int i=10;
int j=20;
cout<<"i,j="<<i<<','<<j<<endl;
swap(&i,&j);//此调用将会生成模板函数的int版本
cout<<"Now i,j="<<i<<','<<j<<endl;
double x=1.2;
double y=2.3;
cout<<"x,y="<<x<<','<<y<<endl;
swap(&x,&y);//此调用会生成模板函数的double版本
cout<<"Now x,y="<<x<<','<<y<<endl;
return 0;
}
template<class Any>
void swap(Any *a,Any *b)
{
Any *temp;
temp=a;
a=b;
b=temp;
}
你执行看看有没有错误
追问
虽然可以运行了,可是不是原本函数意图了 啊,就是想要交换两个变量的值的简单程序,但是要对不同的类型都可以运行成功。为什么要换成指针传递,用引用不行么?
追答
可能是库函数中本来已经存在swap函数,你的程序没有问题,改成其他的函数名,或直接用swap把你自己定义的去掉
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友79054ee
2012-07-14 · TA获得超过190个赞
知道小有建树答主
回答量:196
采纳率:0%
帮助的人:120万
展开全部
#include<iostream>
using namespace std;
template<class Any> void swap(const Any& a,const Any& b)//模板函数原型//在这里参数前加const就行了,还有声明与定义要放在一起吧?、、、、、、、、、、、、、、、
{
Any temp;
temp=a;
a=b;
b=temp;
}
int main()
{
int i=10;
int j=20;
cout<<"i,j="<<i<<','<<j<<endl;
//class Any<int>;
swap(i,j);//此调用将会生成模板函数的int版本
cout<<"Now i,j="<<i<<','<<j<<endl;
double x=1.2;
double y=2.3;
//cout<<"x,y="<<x<<','<<y<<endl;
//swap(x,y);//此调用会生成模板函数的double版本
//cout<<"Now x,y="<<x<<','<<y<<endl;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我心若氺
2012-07-14 · 超过59用户采纳过TA的回答
知道小有建树答主
回答量:192
采纳率:0%
帮助的人:164万
展开全部
vc6.0对函数模板的支持很有问题

建议换VS2010试试

————————————————————————————————
引用也是可以,但是函数库刚好也有一个swap用引用的函数,造成了二义性,

所以说,换个函数名改成比如:swap1就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式