2012-03-29 11 views
2

Ich habe eine benutzerdefinierte Iterator Template-Klasse, die einen std::list Iterator umschließt. In meiner hasNext() Methode möchte ich überprüfen, ob der Iterator auf das letzte Element in der Liste verweist. Doch dieser Code:Kann std :: list nicht mit list :: back() vergleichen?

template< class Type > 
... 
virtual bool hasNext(void) 
{ 
    return itTypes != pList->back(); 
} 
... 
typename std::list<Type> * pList; 
typename std::list<Type>::iterator itTypes; 

Erzeugt den Fehler:

error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'std::_List_iterator<_Mylist>'

Wenn ich vergleiche itTypes-list::begin() oder list::end() ich kein Problem bekommen. Die Dokumentation, die ich für STL-Iteratoren gelesen habe, besagt, dass die von std :: list verwendeten bidirektionalen Iteratoren die Vergleichsoperatoren für Gleichheit und Ungleichheit unterstützen. Gibt es einen Grund, warum ich nicht mit list::back() dann vergleichen kann?

Antwort

7

Sie möchten end(). back() erhält den Wert des letzten Elements, das überhaupt kein Iterator in der Liste ist.

+1

Warum sind die nervigsten Bugs immer die einfachste:/Danke für Ihre Hilfe :) – PeddleSpam

1

Das back() gibt das Element zurück, nicht den Iterator. so Code verwenden

return *itTypes != pList->back() 
1

Die begin() und end() Funktion Rückkehr Iterator während front() und back() Rückholelement Referenz