爱问知识人 爱问教育 医院库

请高手看看为什么我的这段c 代码无法在vc6下编译通过呢?

首页

请高手看看为什么我的这段c++代码无法在vc6下编译通过呢?


        

提交回答
好评回答
  • 2008-11-25 17:01:00
      楼主同志,一楼和二楼的回答忽略吧。 三楼和四楼基本都对,编译是可以通过的,但还是各有一个错误。这个错误会导致运行时错误! 分析如下: 1)三楼错误:T min(const T arr[n]),在函数(模板)定义时,尽管传给函数的可能是个数组,但在函数中,它实际得到的是个指针而已(传地址)。
      因此,在函数里,函数是不可能知道n是多少的,因此在函数里只要用到n的地方就是错的,会导致arr(函数里它只是个指针)指向数组外的地址,导致访问内存违规! 2)四楼错误:template<class T, class N> T min(const T arr[], N n) 这里的n是不能随便限定类型为N的,理由是“i<n”代码的使用,如果n是个类怎么办?如果这个类是个还没定义过"<"重载操作符的话,就会出错。
       作为用户,我完全可能这样使用四楼的函数为:int arr[10];string n("123"); min(arr, n); 请看这里调用函数时,是没错的,但当函数体执行到for(int i=0;i<n;i++)时,就会出错。 3)结合三楼和四楼的思想,我们可以这样定义函数: template<class T, int n> T min(const T arr[], int n){。
      。。}。

    s***

    2008-11-25 17:01:00

其他答案

    2008-11-26 09:19:00
  • ...........无语了!你看你的 #include <string> 改为 #include <string.h>下面一行同理.   真晕啊 错误提示你自己没看啊

    x***

    2008-11-26 09:19:00

  • 2008-11-25 21:30:00
  •   请看我的版本~~~~嗯,看来你要对模板函数的使用多加练习啊#include <iostream> #include <string> using namespace std; template<class T,int n> T min(const T arr[n]) {  T min=arr[0];  for(int i=0;i<n;i++)  {   if(arr[i]<min)   min=arr[i];  }  return min; } int main(int argc, char* argv[]) {  float array[12]={11,2,3,4,5,234,324,34,43,2,4,4};  cout<< min<float,sizeof(array)/sizeof(float)>(array);  return 0; }。
      

    l***

    2008-11-25 21:30:00

  • 2008-11-25 13:43:00
  • 楼上的很好,我也改了一下,自己看啊~~~~ #include <string> #include <iostream> using namespace std; template<class T, class N> T min(const T arr[], N n) { T min=arr[0]; for(int i=0;i<n;i++) { if(arr[i]<min) min=arr[i]; } return min; } int main(int argc, char * argv[]) { float arrary[12]={11,2,3,4,5,234,324,34,43,2,4,4}; cout<<min(arrary, 12); return 0; }

    铁***

    2008-11-25 13:43:00

类似问题

换一换
  • 互联网 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):