标准库中namespace std自带一个swap函数模板,所以在using namespace std;引入namespace std的所有名称后调用swap时发生歧义,编译器不知道调用的swap是std::swap还是LZ自行定义的那个。这是滥用namespace指令造成命名空间污染的典型例子。
解决方法有两个,一个是去掉using namespace std;,在cout、endl等标识符前加上std::(也可以using std::cout;using std::endl;等代替using namespace std;,之后不用重复加std::前缀),这样就会明确swap不是std::swap;另外一个就是自己不要定义名为swap的函数模板,而是使用标准库中没有的模板名称。
====
[原创回答团]
std库中已经存在了一个swap函数了,你只要直接调用就行了,不需要自己再写一个的。
如果想用自己写的,需要将函数名重新改一下才可以。
嗯,简单的来说就是和系统函数重名了
#include
using namespace std;
void swap (int &a, int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
int main()
{
int a=13;
int b=20;
cout<<"a="< cout<<"b="< swap (a,b);
cout<<"a="< cout<<"b="< cin.get();
return 0;
}
这就可以了,你的T 没有定义,交换不需要的