Dumme Kompilierfehler mit Listen / Iteratoren (C ++)
-
06-07-2019 - |
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)
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