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 时出错. 展开
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 时出错. 展开
4个回答
展开全部
把你的swap函数名改一下,可能和某些已经存在的函数冲突了。
改为MySwap就好了。
改为MySwap就好了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
你执行看看有没有错误
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把你自己定义的去掉
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
vc6.0对函数模板的支持很有问题
建议换VS2010试试
————————————————————————————————
引用也是可以,但是函数库刚好也有一个swap用引用的函数,造成了二义性,
所以说,换个函数名改成比如:swap1就行了。
建议换VS2010试试
————————————————————————————————
引用也是可以,但是函数库刚好也有一个swap用引用的函数,造成了二义性,
所以说,换个函数名改成比如:swap1就行了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询