Frage

Das Folgende kompiliert nicht und ich kann nicht für mein Leben von mir verstehen warum!

#include <list>
using namespace std;

list<char> myList;
list<int>::iterator it;

it = myList.begin();

Der Fehler:

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::list<_Ty>::_Iterator<_Secure_validation>' (or there is no acceptable conversion)
War es hilfreich?

Lösung

Dies geschieht, weil list<char> and list<int> sind zwei verschiedene Klassen. Ihre Iteratoren sind also auch verschiedene Typen.
Wenn Sie sich STD :: Listenklassencode ansehen, sehen Sie so etwas wie:

typedef _Iterator<_SECURE_VALIDATION_DEFAULT> iterator;

oder

typedef _Iterator<bla_bla_bla> iterator;

Das bedeutet, dass neuer Typ durch jede bestimmte Klassenliste definiert wird. Mit anderen Worten, jede Liste definiert ihren eigenen Iterator -Typ.

Ändern Sie Ihren Code darauf:

list<char>::iterator it;

Andere Tipps

Weil der Typ des Iterators unterschiedlich ist:

list<char> myList; // char
list<int>::iterator it; // int

Achten Sie darauf, dass der Typ der Liste oder eines anderen Containers nicht nur der ist Schablone Typ Parameter, aber auch alle anderen Vorlagenparameter. Zum Beispiel:

list<char, MyAllocator> mylist;
list<char, YourAllocator> yourlist;
// typeof mylist != type of yourlist      (!!!)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top