c++ - 为通用数据类型创建我自己的迭代器

标签 c++ templates iterator

我不明白为什么我的代码无法编译。

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 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int 并且:错误 1 ​​error C2143: syntax error : missing ';'在“<”之前。 所有关于方法 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 所做的那样。

DEMO

关于c++ - 为通用数据类型创建我自己的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24279095/

相关文章:

使用带有 Wt 的 OpenCV 的 C++ Web 项目

c++ - 在每个实例化中使用 lambda 作为唯一默认参数的模板

c++ - "incomplete type"关于使用 C++ 单位 units::compose

javascript - 如何在不分配的情况下迭代 Javascript 映射或对象?

arrays - 如何在Rust中循环遍历整数向量?

c++ - 可视化图像数据的调试器

c++ - 模板函数特化默认参数

c++ - std::bind 需要默认构造函数

C++:需要从几个类似接口(interface)的类继承的参数类型

c++ - 使用迭代器打印列表