c++ 模板 vector<T>::const_iterator报错
2017-03-15 19:57
477 查看
最近研究<< Object Detection and Recognition in Digital Images Theory and Practice >> 这部神作的时候,从网上下载了一份源码,准备看看效果,结果没有编译通过,代码如下:
编译时候死活通不过去,看看代码感觉也没啥多少问题,后来查找资料发现 http://www.cnblogs.com/dongzhiquan/p/4050997.html
在c++模板中,使用std::vector::const_iterator时,编译器假定这样的名字指定的是数据成员,而不是数据类型成员,如果需要指定为数据类型成员需要使用 typename 关键字
于是改成如下形式, 工程成功编译
ie, 将 这边的
... template < typename T > class safe_pointer_vector : public vector< T * > { public: ... typedef vector< T * > BaseClass; ... public: iterator erase( BaseClass::const_iterator _First_arg, BaseClass::const_iterator _Last_arg ) { DeleteElements( _First_arg, _Last_arg ); return BaseClass::erase( _First_arg, _Last_arg ); // now call the base }
编译时候死活通不过去,看看代码感觉也没啥多少问题,后来查找资料发现 http://www.cnblogs.com/dongzhiquan/p/4050997.html
在c++模板中,使用std::vector::const_iterator时,编译器假定这样的名字指定的是数据成员,而不是数据类型成员,如果需要指定为数据类型成员需要使用 typename 关键字
于是改成如下形式, 工程成功编译
ie, 将 这边的
BaseClass::const_iterator改为
typename vector<T*>::const_iterator即可
... template < typename T > class safe_pointer_vector : public vector< T * > { public: ... typedef vector< T * > BaseClass; ... public: iterator erase( typename vector<T*>::const_iterator _First_arg, typename vector<T*>::const_iterator _Last_arg ) { DeleteElements( _First_arg, _Last_arg ); return BaseClass::erase( _First_arg, _Last_arg ); // now call the base }
相关文章推荐
- c++ 模板参数做容器参数迭代器报错 vector<T>::const_iterator,typename const报错
- c++ 中 const_iterator 和 const vector<>::iterator的区别
- const vector <int> ::iterator和vector <int>::const_iterator有什么不同
- 不能将参数 1 从“int”转换为“std::_Vector_const_iterator<_Myvec>”(VS2010 )
- const vector<> :: iterator 和 vector<>::const_iterator的区别
- c++ 中 const_iterator 和 const vector<>::iterator的区别
- #碰到的小问题#c++中vector<int> 和vector<int>::iterator有什么不同
- C++学习:关于“std::vector<Type>::iterator”的一个错误
- const vector<int>::iterator和vector<int>::const_iterator的区别
- C++ vector<int>::size_type的使用
- convert 'std::vector<>::iterator {aka __gnu_cxx::__normal_iterator<*, std::vector<> >}' to '*' in in
- (转载)vector<int>::iterator mid=(vi.begin()+vi.end())/2
- C++ <vector>入门(1)
- C++ <vector>入门(2)
- convert 'std::vector<>::iterator {aka __gnu_cxx::__normal_iterator<*, std::vector<> >}' to '*' in in
- C/C++中容器vector使用方法<第一弹>
- C/C++中容器vector使用方法<第二弹>
- <C/C++基础> 类模板
- c++中vector<int>和vector<int*>的用法比较
- <转载>独一无二的C++模板