5

在这个程序中,调用交换函数给出了一个称为调用 overloded 函数的错误是 ambiguos。请告诉我如何解决这个问题。是否有任何不同的调用模板函数的方法

     #include<iostream>
    using namespace std;
      template <class T>
    void swap(T&x,T&y)
    {
            T temp;
            temp=x;
         x=y;
           y=temp;
       }
    int main()
   {
    float f1,f2;
    cout<<"enter twp float numbers: ";
    cout<<"Float 1: ";
     cin>>f1;
    cout<<"Float 2: ";
    cin>>f2;
    swap(f1,f2);
    cout<<"After swap: float 1: "<<f1<<" float 2:"<<f2;
    int a,b;
    cout<<"enter twp integer numbers: ";
    cout<<"int 1: ";
    cin>>a;
    cout<<"int 2: ";
    cin>>b;
    swap(a,b);
    cout<<"After swap: int 1: "<<a<<" int 2:"<<b;
    return 0;
    }
4

3 回答 3

9

move.h您的功能与您的某些包含隐含包含的功能相冲突。如果您删除using namespace stdthis 应该是固定的 - 您与之冲突的功能是在std命名空间中定义的。

于 2013-11-05T12:52:41.623 回答
1

通过将交换函数更改为 my_swap 函数,它可以解决问题。因为swap也是c++中的预定义函数

#include<iostream>
using namespace std;
  template <class T>
void my_swap(T&x,T&y)
{
        T temp;
        temp=x;
     x=y;
       y=temp;
   }
int main()
{
  float f1,f2;
cout<<"enter twp float numbers: ";
cout<<"Float 1: ";
 cin>>f1;
cout<<"Float 2: ";
cin>>f2;
my_swap(f1,f2);
cout<<"After swap: float 1: "<<f1<<" float 2:"<<f2;
int a,b;
cout<<"enter twp integer numbers: ";
cout<<"int 1: ";
cin>>a;
cout<<"int 2: ";
cin>>b;
my_swap(a,b);
cout<<"After swap: int 1: "<<a<<" int 2:"<<b;
return 0;
}
于 2013-11-05T13:18:24.393 回答
0

当然,重命名您的函数或删除 -> 库中已经有一个:

http://www.cplusplus.com/reference/algorithm/swap/

这就是您的编译器所抱怨的。

于 2013-11-05T12:54:20.990 回答