CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

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

楼主xrayshow(Shekinah)2005-08-04 04:34:57 在 C/C++ / C++ 语言 提问

//     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

相关问题

  • 一道编译原理的题目
  • 一道和编译有关的题!zju-1306
  • 编译问题!!
  • 编译问题?
  • 编译问题!
  • 编译问题
  • 编译问题!
  • 编译问题?
  • 编译问题
  • 编译问题?

关键词

  • 函数
  • 模板
  • template
  • 重载
  • max
  • double

得分解答快速导航

  • 帖主:xrayshow
  • nirendao
  • jiaben

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo