C++自定义模板类中STL iterator未定义的问题
2016-06-30 19:51
204 查看
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的地址,从而能够判断出其是一个类型而不是成员变量。
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言判断一个数是否是2的幂次方或4的幂次方
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- C语言实现选择排序、冒泡排序和快速排序的代码示例