《c++模板学习》中函数模板例子出现的问题

来源:互联网 发布:社工 数据库 编辑:程序博客网 时间:2024/06/10 05:15

上一篇文章《c++模板学习》中函数模板的例子:

#include <iostream>using std::cout;using std::endl;//声明一个函数模版,用来比较输入的两个相同数据类型的参数的大小,class也可以被typename代替,//T可以被任何字母或者数字代替。template <class T>T min(T& x,T& y){ return(x<y)?x:y;}int main( ){      int n1=2,n2=10;     double d1=1.5,d2=5.6;     cout<< "较小整数:"<<min(n1,n2)<<endl;     cout<< "较小实数:"<<min(d1,d2)<<endl;     system("PAUSE");     return 0;}


 

在运行的时候会出错,错误提示如下:

这是因为在文件xutility中也定义了一个min函数,这个头文件一定是被包含在了iostream类的相关文件中,如下:

#define _IMPL_MIN min

              // TEMPLATE FUNCTION min

template<class _Ty> inline

       const _Ty& (__CLRCALL_OR_CDECL _IMPL_MIN)(const _Ty& _Left, const _Ty& _Right)

       {     // return smaller of _Left and _Right

       return (_DEBUG_LT(_Right, _Left) ? _Right : _Left);

       }

因此在main()函数中调用的时候编译器分不清调用哪个。

解决方法:

将自己定义的模板改个名字就可以了。

还有一个方法是将模板定义成如下形式:

template <class T>
T min(T& x,T& y)
{
 return(x<y)?x:y;
}

这样定义的话就和xutility文件中的定义一样了,所以编译器编译的时候也不会有二义性。

0 0