各位大神。问下。这个简单的代码错哪里了。解决方法

各位大神。问下。。这个简单的代码错哪里了。。。
#include<iostream>
using namespace std;
template <typename T>
void swap(T& x,T& y )
{ T temp=x; 
x=y;
y=temp;  
}
void main()
{ int j=1,k=3;
  cout<<"int 数据类型:\n"<<j<<","<<k<<"=>"; swap(j,k); cout<<j<<","<<k<<endl;
  double x=1.23,y=9.87;
  cout<<"double数据类型: \n"<<x<<","<<y<<"=>"; swap(x,y); cout<<x<<","<<y<<endl;
  char p='A',q='B';
  cout<<"char 数据类型:\n"<<p<<","<<q<<"=>"; swap(p,q); cout<<p<<","<<q<<endl ;
}

------解决方案--------------------
把 swap别处取个 库里没有的名字,如sswap就好。

因为你实现的和 sTL中里面的不同,所以有二义性
------解决方案--------------------
同意楼上,将swap给为swap1,编译通过。
------解决方案--------------------
1楼正解
swap改成其他
------解决方案--------------------
1楼++
------解决方案--------------------
namespace std里本来就用模板定义了swap函数,你再用模板定义一遍就导致系统无法判定该调用谁了。