读书人

高手看看MinGW编译器对vector模板迭代

发布时间: 2012-02-12 17:16:34 作者: rapoo

高手看看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> 的一个内嵌类型,而不是一个值。

读书人网 >C++

热点推荐