user3748682
user3748682

Reputation: 93

creating my own iterator for generic data type

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

Answers (1)

Dimitrios Bouzas
Dimitrios Bouzas

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
}
  • I recommend you declare/define your Iterator private, and provide access via a typedef, much like what STL does.

DEMO

Upvotes: 1

Related Questions