我无法理解为什么我的代码无法编译。
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错误C2143:语法错误:缺少&#39 ;;&#39;之前&#39;&lt;&#39; 所有关于方法begin()和end()(在他们的第一行Iterator PriorityQueue :: begin())。 编辑:我尝试使用typename,但它没有帮助。
答案 0 :(得分:1)
您可以执行以下操作:
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所做的那样。