为泛型数据类型创建自己的迭代器
creating my own iterator for generic data type
我不明白为什么我的代码不能编译。
template<class Priority,class T> class PriorityQueue {
public:
class Iterator;
//some methods
Iterator begin() const;
Iterator end() const;
};
然后在Iterator类中:
template<class Priority,class T>
class PriorityQueue<Priority,T>::Iterator {
//implement ctor,operator++,==etc.
我得到的几乎所有84个错误都是关于这些函数的:
template<class Priority,class T>
Iterator<Priority,T> PriorityQueue<Priority,T>::begin() const{
return Iterator<Priority,T>(firstNode);
}
template<class Priority,class T>
Iterator<Priority,T> PriorityQueue<Priority,T>::end() const{
return Iterator<Priority,T>(nullptr);
}
错误是:错误2错误C4430:缺少类型说明符-假定为int。注意:c++不支持default-int。错误2:缺少类型说明符-假设为int。注意:c++不支持default-int和:Error 1 Error C2143:语法错误:在'<'之前缺少';'。所有关于方法begin()和end()(在它们的第一行Iterator PriorityQueue::begin())。编辑:我试过使用typename,但没有帮助。
你可以这样做:
template<class Priority, class T> class PriorityQueue {
class Iterator {
//implement ctor,operator++,==etc.
};
public:
typedef Iterator iterator;
//some methods//implement ctor,operator++,==etc.
Iterator begin() const;
Iterator end() const;
};
template<class Priority,class T>
typename PriorityQueue<Priority, T>::iterator
PriorityQueue<Priority,T>::begin() const {
return Iterator(); // return right staff
}
template<class Priority,class T>
typename PriorityQueue<Priority, T>::iterator
PriorityQueue<Priority,T>::end() const{
return Iterator(); // return right staff
}
- 我建议您声明/定义您的
Iterator
private
,并通过typedef
提供访问,就像STL所做的那样。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 在C++程序中使用的迭代器中未处理的异常
- 反转依赖于 end() 的迭代器
- 定义模板参数的迭代器类型
- 如何为指向复杂值的迭代器专门化算法?
- C++ 如何为自己的迭代器类从迭代器转换为const_iterator?
- std::list 中的迭代器感知对象
- 为什么在指向对象的迭代器上调用函数不允许我更改对象本身?
- 使用自己的迭代器分配容器是否安全?
- 自己的迭代器因 std::sort 而崩溃
- 将自己的迭代器与 std::string 一起使用
- 奇怪的自己的迭代器行为与STL的列表相比
- 自己的迭代器不起作用
- Visual Studio中的std::transform在使用自己的迭代器时会失败
- 为泛型数据类型创建自己的迭代器
- 如何让我自己编写的迭代器支持 ->?
- visual C++标准是否要求自己的迭代器是另一个可移动/可复制的
- 为非 stl 容器创建我自己的迭代器
- 无法基于STL迭代器编写自己的迭代器