为什么通不过编译呢?
#include <iostream>
using namespace std;
template <class elemType>
void print( elemType *pbegin, elemType *pend )
{ while ( pbegin != pend ) {
cout << *pbegin << ' ';
++pbegin;
}
}
template<class length,class elemType>
int length(elemType *c){
return sizeof(c)/sizeof(elemType);
}
int main(){
int ia[]={1,2,3,4,5,8,7,3,2};
char ib[]={"a,b,c,d,e,f,g,h"};
float ic[]={1,2,3,4,5,6,7};
int length_a=0;
length(ia);
/*int length_b=length(ib,char);*/
// int length_c=length(ic,float);
return 0;
}
[解决办法]
#include <iostream>using namespace std;// 上面的全是编译指令, 最好和下面的正文分开两行写.template <typename elemType> // typename 在这类等同于 class, 只不过 class 还用于声明一个类, 所以我在此使用 typename. 这是无关紧要的, 但是一定要保持你的一贯风格.void print(elemType *pbegin, elemType *pend){ while (pbegin != pend) { cout << *pbegin << ' '; ++pbegin; }}template<class elemType>int length(elemType *c){ return sizeof(c) / sizeof(elemType);}int main(int argc, char **argv){ int ia[]={1,2,3,4,5,8,7,3,2}; char ib[]={"a,b,c,d,e,f,g,h"}; float ic[]={1,2,3,4,5,6,7}; int length_a=length(ia); int length_b=length(ib); int length_c=length(ic); cout <<length_a <<endl; cout <<length_b <<endl; cout <<length_c <<endl; return 0;}
[解决办法]
上面的程序中
template<class elemType> // 这的 class 也应该改为 typename, 以保持一致.int length(elemType *c){ return sizeof(c) / sizeof(elemType);}
[解决办法]
楼主还是看一下模版..
template<class [color=#FF0000]length[/color],class elemType>int [color=#993300]length[/color](elemType *c)//明显重定义,不知道LZ是不是要把Length作为返回类型{return sizeof(c)/sizeof(elemType);}
[解决办法]
return sizeof(c)/sizeof(elemType);
这句是个固定值没意义
[解决办法]