CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

函数调用问题?请各位大侠指点

楼主Virtualboy58(virtualboy58)2005-03-04 00:16:48 在 C/C++ / C++ 语言 提问

#include   <iostream>  
  #include   <stdlib.h>  
   
  using   namespace   std;  
  template<class   T,int   size>  
  T   min(const   T   (&arr)[size])  
  {  
  int   i;  
  T     mi=arr[0];  
  for(i=1;i<size;++i)  
  {  
  if(mi>arr(i))   mi=arr[i];  
  }  
  return   mi;  
  }  
   
  int   main(int   argc,   char   *argv[])  
  {  
      int   j;  
      int   a[10];  
      for(j=10;j>0;--j)   a[j]=j;  
   
      system("PAUSE");  
      return   0;  
  }  
   
   
   
  以上程序在dev下可以编译,请问如何调用min函数 问题点数:20、回复次数:10Top

1 楼nicknide(封月翔天)回复于 2005-03-04 01:12:11 得分 5

min<int,10>(a);Top

2 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2005-03-04 01:13:16 得分 5

min(a);   编译器会根据a来推导T和sizeTop

3 楼nicknide(封月翔天)回复于 2005-03-04 01:33:52 得分 0

鸡丁,这个地方不行啊,因为一般的编译器都无法推导  
  当然,理论上是可行的.  
   
  我用的VC.NET   ->   VC   8.0  
  说:  
  未能推导出“T1   [size]”(从“int   [100]”中)的模板参数Top

4 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2005-03-04 02:12:33 得分 0

really?我用GCC3.2,   VC7.1,   VC8   beta1都通过了,只是ICC8.0没有通过,是因为那个const在作怪Top

5 楼nicknide(封月翔天)回复于 2005-03-04 11:28:19 得分 0

晕,鸡丁你厉害,反正我这里是没有办法。  
  死活过不去,我是这样的:  
   
  template   <typename   T,   int   size>  
  T   f(T   a[size]   ){return   a[size-1];}  
   
  int   main()  
  {  
        int   a[10];  
        a[9]   =   9;  
        int   j   =   f(a);   //   int   j   =   f<int,10>(a);这样就没有问题  
        return   0;  
  }Top

6 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2005-03-04 11:49:56 得分 0

template   <typename   T,   int   size>  
  T   f(T   (&a)[size]   ){return   a[size-1];}   //应该是引用  
   
  int   main()  
  {  
        int   a[10];  
        a[9]   =   9;  
        int   j   =   f(a);   //   int   j   =   f<int,10>(a);这样就没有问题  
        return   0;  
  }  
  Top

7 楼tudou614(魔蟹座的SATAN)回复于 2005-03-04 12:24:16 得分 2

T   min(const   T   (&arr)[size])  
  换成一种具体形式就能看懂了吧:  
  int   min(const   int   (&arr)[size])Top

8 楼Salam2001(Upgrading : C++ and Data Structure ...)回复于 2005-03-04 12:41:58 得分 8

错误很多呀,先是数组越界,然后是不正确的数组元素检索。  
   
  #include   <iostream>  
  using   namespace   std;  
   
  template<   class   T,   int   size   >  
  T   min(   const   T   (&arr)[size]   )  
  {  
  int   i;  
  T   mi   =   arr[0];  
   
  for(   i   =   1;   i   <   size;   ++i   )  
  if(   mi   >   arr[   i   ]   )   mi   =   arr[i];  
   
  return   mi;  
  }  
   
  int   main(int   argc,   char   *argv[])  
  {  
  int   j;  
   
  for(   j   =   9;   j   >=   0;   --j   )  
  a[j]   =   j;  
   
  j   =   min(   a   );  
  cout   <<   j   <<   endl;  
   
  return   0;  
  }  
   
  我这里用的是Intel   C++   Compiler   8.1,没有任何问题,可以正确推导。Top

9 楼Salam2001(Upgrading : C++ and Data Structure ...)回复于 2005-03-04 12:43:22 得分 0

晕~~~  
  整理的时候删掉数组   a   的定义了...  
  Top

10 楼Virtualboy58(virtualboy58)回复于 2005-03-04 13:09:04 得分 0

终于明白了   ,谢谢大家了!Top

相关问题

  • 调用函数出错,请各位指点,谢谢!!!!!
  • 高手指点,如何调用netapi32.dll中的netMessageBufferSend函数?
  • 望指点:系统调用与函数库关系
  • 函数调用
  • 函数调用
  • 调用函数
  • 函数调用
  • 函数调用
  • 函数调用?
  • 我一定要弄清楚:究竟怎么样才可以在Doc类中调用View类的函数。请各位大侠指点~

关键词

  • template
  • vc
  • arr
  • min
  • mi
  • 问题
  • size
  • const
  • 没有
  • main

得分解答快速导航

  • 帖主:Virtualboy58
  • nicknide
  • Jinhao
  • tudou614
  • Salam2001

相关链接

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

广告也精彩

反馈

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