首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

template const有关问题 !VS2005下

2012-03-26 
templateconst问题 !VS2005下!templatetypename etet* MyFind(const et *first, const et *last, const

template const问题 !VS2005下!
template<typename et>
et* MyFind(const et *first, const et *last, const et &val)
{
if( !first || !last )
return 0;
for( ; first != last; ++first)
if( *first == val )
return first;
return 0;
}
int main()
{
const int size=7;
int iarr[size]={12, 70, 2, 169, 1, 5, 29};

int val=70; 
int *pi = MyFind(iarr,iarr+7, val);
cout<<*pi<<endl;
return 0;
}
const et *first 有const编译都过不去!错误是const int*---int*!~  
去掉const!一切皆OK~!为什么!`
但是去掉const是存在风险的!所以想不去掉const!`其中原由希望能得到详细点解答及解决之道! 在线等答案~!

[解决办法]
const et *first

这里是const

return first; 然后你企图把他作为一个非const的返回,

你这么做才有风险呢。
[解决办法]

C/C++ code
#include <iostream>#include <cstring>using namespace std;template <typename et> const et* MyFind(const et *first, const et *last, const et &val) {     if (!first || !last)         return 0;     for (; first != last; ++first)         if (*first == val)             return first;     return 0; } int main() {     const int size = 7;     int iarr[size] = {12, 70, 2, 169, 1, 5, 29};     int val = 70;       const int *pi = MyFind(iarr, iarr+7, val);     cout<<*pi<<endl;     return 0; }
[解决办法]
这样:你的返回的et不是一个const指针,这样的话就不能返回,要加上const

同时int *pi = MyFind(iarr,iarr+7, val); 这里你得到pi仅仅是想输出,不妨

也加上const,其实是你想用const实现安全,但编译器也想,所以你把const int*赋给int *

当然编译器不允许了,代码如下:

C/C++ code
#include<iostream>using namespace std;template <typename   et> const et*   MyFind(const   et   *first,   const   et   *last,   const   et   &val) { if(   !first   ||   !last   ) return   0; for(   ;   first   !=   last;   ++first) if(   *first   ==   val   ) return   first; return   0; } int   main() { const   int   size=7; int   iarr[size]={12,   70,   2,   169,   1,   5,   29}; int   val=70;   const int   *pi   =   MyFind(iarr,iarr+7,   val); cout <<*pi <<endl; return   0; } 

热点排行