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