Reputation: 93
I can't understand why my code doesn't compile.
template<class Priority,class T> class PriorityQueue {
public:
class Iterator;
//some methods
Iterator begin() const;
Iterator end() const;
};
and then in the Iterator class:
template<class Priority,class T>
class PriorityQueue<Priority,T>::Iterator {
//implement ctor,operator++,==etc.
Almost all the 84-errors I get are about these functions:
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);
}
The error is: Error 2 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int. And: Error 2 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int and: Error 1 error C2143: syntax error : missing ';' before '<'. All regarding the method begin() and end() (in their first line Iterator PriorityQueue::begin()). EDIT: I tried using typename but it didn't help.
Upvotes: 0
Views: 153
Reputation: 42899
You can do something like below:
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
, and provide access via a typedef
, much like what STL does.Upvotes: 1