【发布时间】:2012-03-18 00:50:59
【问题描述】:
我是一名新的 C++ 程序员,前段时间我学习了 Java 和 ANSI C,并决定试一试。
嗯,我喜欢 C++,但我不喜欢迭代器的工作方式:
在 java 中,您可以将整个容器设为私有,并为其迭代器实现一个 getter 函数,并且迭代器有一个方法 hasNext(),该方法根据它是否已到达容器的末尾返回一个布尔值。
我发现在 C++ 上做类似事情的唯一方法是编写 2 个 getter,iteratorBegin() 和 iteratorEnd(),它们返回一个对应于第一个和最后一个位置的迭代器,递增 iteratorBegin() 返回的迭代器并比较它使用iteratorEnd(),允许我遍历容器直到到达最终位置
但是,我只想使用 ONE getter 方法,我想:“让我们创建自己的迭代器类”
到目前为止一切顺利,我已经用集合和列表成功地做到了,但我似乎无法用地图做到这一点,这是困扰我的代码:(该类在单独的 .h 中定义,这个被称为 customIterator.cpp)
template<typename T, typename D>
const D& custIterator<T,D>::next()
{
const D& obj = (*it);
if(hasNext())
{
it++;
}
return obj;
}
//the above works fine
template<typename T, typename D>
const D& custIterator<map<T,D>,D>::next() //error in this line
{
D& obj = (*it).second;
if(hasNext())
{
it++;
}
return obj;
}
编译专用方法时,它说:错误:'map'未在此范围内声明
即使我在文件顶部添加了#include <map>
我正在使用带有代码块的 gcc 版本 4.4.5 (Debian 4.4.5-8)
拜托,我需要一些帮助。
感谢您的关注!
【问题讨论】:
-
在包含映射下使用 std::map。或者在 custIterator ... 中限定地图可能会成功。
标签: c++ templates map iterator partial-specialization