Programming is an Art

不玩音乐的产品经理不是好程序员!

函数模版template学习中的一个编译问题

                 c++学习函数模版的时候,写了一个交换函数的程序,函数为swap(),目的是交换两个数据。

                 源程序:

                 

#include<iostream>
using namespace std;
template < class T >
void swap(T& x, T& y)
{
	T t;
	t = x;
	x = y;
	y = t;
}
int main()
{
	int a = 1,b = 2;
	double i = 1.1,j = 2.2;
	char ch1 = 'A',ch2 = 'B';
	swap(a,b);
	swap(i,j);
	swap(ch1,ch2);
	cout<<a<<" "<<b<<endl;
	cout<<i<<" "<<j<<endl;
	cout<<ch1<<" "<<ch2<<endl;
	return 0;
}

              只见代码的话,语法什么的都是没有问题的。但是编译的时候却出现了六个错误!!

               

               原因是什么呢?

               原因是函数调用有歧义,也就是说swap函数在VC的STL已经是一个API函数。而且定义上面的定义一样,所以会发生歧义。最简单的解决方法当然是把函数名改了就行了,只要比如改成Two_swap()是没有问题的。当然如果已经写成这样的,不想改的话,可以添加,就是用自己的命名空间把函数包围起来,调用的时候再加上就可以了。

            例如:

            

#include<iostream>
using namespace std;
namespace Test                //自定义命名空间将函数包围
{
template < class T >
void swap(T& x, T& y)
{
	T t;
	t = x;
	x = y;
	y = t;
}
using namespace Test;         //这行也必须有
}
int main()
{
	int a = 1,b = 2;
	double i = 1.1,j = 2.2;
	char ch1 = 'A',ch2 = 'B';
	Test::swap(a,b);          //注意调用的形式
	Test::swap(i,j);
	Test::swap(ch1,ch2);
	cout<<a<<" "<<b<<endl;
	cout<<i<<" "<<j<<endl;
	cout<<ch1<<" "<<ch2<<endl;
	return 0;
}

       这样运行是没有问题的,这里就不截图了。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012805027/article/details/17090987
个人分类: c++学习笔记
上一篇c++模版 template
下一篇unity3D 从摄像机发射射线,检测画线
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭