函数调用问题?请各位大侠指点
#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




