C++自定义模板类中STL iterator未定义的问题
来源:互联网 发布:js单选按钮取消选中 编辑:程序博客网 时间:2024/05/22 00:38
C++自定义模板类中STL iterator未定义的问题
最近在写一个模板类用到了stl map迭代器,遇见一下问题
#include <map>#include <iostream>using namespace std;template <class T>class A{public: void iterate() { map<int, T>::iterator itr; for(itr = map_.begin(); itr != map_.end(); ++itr) { cout<<itr->first<<endl; } }private: map<int, T> map_;};
编译如上代码,得到如下错误:
template_test.h: In member function ‘void A<T>::iterate()’
:
template_test.h:9: error: expected ‘;’ before ‘itr’
template_test.h:10: error: ‘itr’ was not declared in this scope
错误的原因在于编译器不清楚map<int, T>::iterator
是一个类型,需要加上typename关键字来帮助编译器做判断
map<int, T>::iterator itr
改为typename map<int, T>::iterator itr
编译器为什么不清楚呢?因为iterator可能是map<int, T>
的一个成员变量而不是一个类,这样的话使用iterator来声明一个变量就会出现以上错误。
而在一个非自定义模板类中使用map<int,int>::iterator itr
就不会有问题,是因为编译器能够明确找到该iterator的地址,从而能够判断出其是一个类型而不是成员变量。
0 0
- C++自定义模板类中STL iterator未定义的问题
- STL 模板库中迭代器 iterator 失效问题
- 模板类中定义std::list::iterator iter容器的迭代器变量的问题
- 关于STL erase的iterator失效问题
- 关于STL erase的iterator失效问题
- 未定义基类的问题
- c++STL中遇到的问题
- MapXtreme中mapinfowebtoolactivate 未定义问题的解决方法!
- C++:STL模板类vector
- 谈一谈stl的iterator
- STL的迭代器--Iterator
- STL的迭代器--Iterator
- STL的set iterator
- 【STL】c++primer里面关于iterator的定义
- C++模板类的问题 map::iterator 编译报错的问题
- WebForm_PostBackOptions未定义的问题
- WebForm_PostBackOptions未定义的问题
- ajaxpro未定义的问题
- opencv学习(2)——图像处理的一些常见操作
- Spring框架 JdbcTemplate(五)
- Android 复习1.1 神奇的bundle
- ORACLE体系结构
- link to SIFT算法
- C++自定义模板类中STL iterator未定义的问题
- 串定位运算(完整程序)
- Openstack中的Eventlet分析(2)
- C++17、STL——Vector
- nginx debug
- 313. Super Ugly Number
- 社会化APP加载表情的方法
- 翻译 /documentation/kobject.txt
- 虚拟机ssh免密码登陆