template class List; // required forward declaration template class ListIterator { friend class List; public: ListIterator(); bool hasNext() const; bool hasPrevious() const; T &next(); /* throws NoSuchObject */ T &previous(); /* throws NoSuchObject */ void set( const T & ); /* throws NoSuchObject */ void printInternal() const; private: Node *current; bool before; }; // ListIterator class