书上的一道题,但就是编译不了。。。
// 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呢?
问题点数:5、回复次数:5Top
1 楼nirendao(雷老虎)回复于 2005-08-04 06:32:20 得分 3
其实double max( double, double ); //重载模板函数 这一句可以根本不需要,你再编译,结果还是一样的错误。
我把你的模版改了一下,同时把上面那句注释掉了,运行就成功了:
template <class T,class V>
T max( T x, V y )
{
return( x>y )?(x):(y);
}
Top
2 楼xrayshow(Shekinah)回复于 2005-08-04 06:41:00 得分 0
template <class T,class V> 这句是不是定义了两种类型啊?
这道题目的本意是介绍 重载函数的 用法的,so 我主要是要看重载的做法。。。
无论如何,谢谢你 nirendao(没别的,就是分多) !
Top
3 楼jiaben(【盐】◆永远甲苯◆【一SE世】·不会明白)回复于 2005-08-04 21:35:52 得分 2
你试试重载一下"<",
或者你换一种编译器试试,
VC不行,
可能BC(侯捷先生上课讲模板时推荐)
或是GNU的C++编译器可以Top
4 楼nirendao(雷老虎)回复于 2005-08-05 07:37:58 得分 0
是两种类型,不过不也是重载么?按照你那个模版,只是同一种类型在比较大小(只不过可以是任何的同一种类型),但是你的最后3个cout却是两种不同类型在比较大小,所以正需要一个两种类型比较的重载啊。
是这样的么?我很久没有碰了,不知道是不是我有什么没有理解到的地方。Top
5 楼xrayshow(Shekinah)回复于 2005-08-05 21:43:22 得分 0
谢谢各位!!!Top




