书上的一道题,但就是编译不了。。。

xrayshow 2005-08-04 04:34:57
// OOP 第八章:模板 例题8.2
//
//

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

double max( double, double ); //重载模板函数
//int max( int, int );

#include <iostream>

using namespace std;

void main()
{
int x=3, y=4;
long l=5;
double a=1.1, b=3.4;

cout << max( x, y ) << endl; //调用模板函数 int max( int, int )
cout << max( a, b ) << endl; //调用模板函数 double max( double, double )
cout << max( l, a ) << endl; //调用重载模板函数 double max( double, double )
cout << max( a, l ) << endl; //调用重载模板函数 double max( double, double )
cout << max( x, l ) << endl; //调用重载模板函数 double max( double, double )
}

如上。。 vc6 提示:'T __cdecl max(T,T)' : template parameter 'T' is ambiguous could be 'double' or 'long'
.
.
.

后3个 max() 语句不是重载了吗? 为什么还提示 T 不明确是double还是long呢?
...全文
132 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xrayshow 2005-08-05
  • 打赏
  • 举报
回复
谢谢各位!!!
执假以为真 2005-08-05
  • 打赏
  • 举报
回复
是两种类型,不过不也是重载么?按照你那个模版,只是同一种类型在比较大小(只不过可以是任何的同一种类型),但是你的最后3个cout却是两种不同类型在比较大小,所以正需要一个两种类型比较的重载啊。
是这样的么?我很久没有碰了,不知道是不是我有什么没有理解到的地方。
jiaben 2005-08-04
  • 打赏
  • 举报
回复
你试试重载一下"<",
或者你换一种编译器试试,
VC不行,
可能BC(侯捷先生上课讲模板时推荐)
或是GNU的C++编译器可以
xrayshow 2005-08-04
  • 打赏
  • 举报
回复
template <class T,class V> 这句是不是定义了两种类型啊?

这道题目的本意是介绍 重载函数的 用法的,so 我主要是要看重载的做法。。。

无论如何,谢谢你 nirendao(没别的,就是分多) !
执假以为真 2005-08-04
  • 打赏
  • 举报
回复
其实double max( double, double ); //重载模板函数 这一句可以根本不需要,你再编译,结果还是一样的错误。

我把你的模版改了一下,同时把上面那句注释掉了,运行就成功了:
template <class T,class V>
T max( T x, V y )
{
return( x>y )?(x):(y);
}

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧