一个C++的程序编译错误:none of 2 overload have a best conversion

来源:百度知道 编辑:UC知道 时间:2024/05/21 13:15:21
程序如下:
#include <iostream>
using namespace std;

template<class T>
void do_swap(T& v1,T& v2)
{
int tmp=v1;
v1=v2;
v2=tmp;
}

template<class T>
void swap(T& v1,T& v2)
{
if(v1==v2)
{cout<<"两数相等"<<endl;
}
else
return do_swap(v1,v2);
}
int main()
{
int a,b;
cin>>a>>b;
swap(a,b);
cout<<a<<endl<<b<<endl;
return 0;
}
我把模板换成int可以通过编译,但当我输入两个相等的数时,程序并为输出:"两数相等"???还有这里不能用模板吗???
小弟,初学编程,请高手帮忙!!
也可说一下对学习软件编程的看。不胜感激!!
我在看C++ primer关于return语句的内容自己写的,那个 cout<<"两数相等"<<endl; 原来后面还有有个return;我忘写了;我想检验一下这个return的作用是否为提前结束调用的函数;但程序从没输出过“两数相等”,return语句我不想去掉,请高手再看一下哪里不对.

do_swap(v1,v2)前的return不想去掉也不行,因为编译通不过。除非你分为两行:else {do_swap(v1, v2); return;}
改成这样吧:

#include <iostream>
using namespace std;

template<class T>
void do_swap(T& v1,T& v2)
{
T tmp=v1;
v1=v2;
v2=tmp;
}

template<class T>
bool swap1(T& v1,T& v2)
{
if(v1==v2)
{
cout<<"两数相等"<<endl;
return false;
}
else
{
do_swap(v1,v2);
return true;
}
}
int main()
{
int a,b;
cin>>a>>b;
if (swap1(a,b))
cout<<a<<endl<<b<<endl;
return 0;
}

#include <iostream>
using namespace std;

template<class T>
void do_swap(T& v1,T& v2)
{
T tmp=v1;//int改为T这样才起得到模板的作用
v1=v2;
v2=tmp;
}

template<class T>
void swap(T& v1,T& v2)
{
if(v1==v2)
{