我不明白为什么我的代码无法编译。
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/