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

高手看看MinGW编译器对vector模板迭代器的不支持,该如何解决

2012-02-12 
高手看看MinGW编译器对vector模板迭代器的不支持在C++Primer3E中有个练习,如下练习2.23已知下列函数声明请

高手看看MinGW编译器对vector模板迭代器的不支持
在C++   Primer   3E中有个练习,如下
练习2.23
已知下列函数声明请实现min()的函数体它查找并返回vec   的最小元素要求首先使
用索引vec   中元素的for   循环来实现min()   然后再使用通过迭代器遍历vec   的for
循环来实现min()
template   <class   elemType>
elemType
min(   const   vector <elemType>   &vec   );


我进行的实现,以下是我的源码:

头文件
——————————
#ifndef   LEARN_H_
#define   LEARN_H_
#include   <vector>
using   namespace   std;
namespace   learn   {
template   <class   elemType>
elemType   min(const   vector <elemType>   &vec)   {
elemType   minElem   =   *vec.begin();
vector <elemType> ::const_iterator   elemIt   =   vec.begin();
for(   ;   elemIt   !=   vec.end()   ;   elemIt++){
minElem   =   std::min(minElem   ,   *elemIt);
}

return   minElem;
}
}
#endif   /*LEARN_H_*/

CPP文件
——————————————————
#include   <iostream>
#include   <vector>
#include   "Point.h "
#include   "learn.h "

using   namespace   std;

int   main(){
int   a[]   =   {10,2,4,1};
vector <int>   ivec(a   ,   a+4);  

int   minValue   =   learn::min(ivec);

cout   < <   minValue;
return   0;
}

同样一段代码在VS2005中可以编译运行,在MinGW+CDT+Eclipse的环境中报错:
..\src\/learn.h:13:   error:   dependent-name   `   std::vector <elemType,std::allocator <_CharT>   > ::const_iterator '   is   parsed   as   a   non-type,   but   instantiation   yields   a   type

如果将模板elemType换成具体类型,就可以运行。

请教高手啊,为什么会这样,俺用MinGW+CDT+Eclipse就是想学习最标准的C++语法!!!郁闷

[解决办法]
typename vector <elemType> ::const_iterator elemIt = vec.begin();
兄弟,是你自己的问题。

[解决办法]
vector <elemType> ::const_iterator elemIt = vec.begin();
要换成
typename vector <elemType> ::const_iterator elemIt = vec.begin();
[解决办法]
自己未实例化,呵呵
[解决办法]
typename vector <elemType> ::const_iterator
告诉编译器const_iterator是vector <elemType> 的一个内嵌类型,而不是一个值。

热点排行