请高手看看为什么我的这段c++代码无法在vc6下编译通过呢?
楼主同志,一楼和二楼的回答忽略吧。 三楼和四楼基本都对,编译是可以通过的,但还是各有一个错误。这个错误会导致运行时错误! 分析如下: 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){。
。。}。
请看我的版本~~~~嗯,看来你要对模板函数的使用多加练习啊#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; }。
...........无语了!你看你的 #include <string> 改为 #include <string.h>下面一行同理. 真晕啊 错误提示你自己没看啊
答:这个问题我好象在 这个论坛上面 看到过 你自己找一找进入后有分类自己看 一定能找到你的答案的,如果解决了你的问题一定要给我加分哦! 谢谢!详情>>