Verwenden Sie const_iterator
als:
Aus dem Fehler wird klar, dass mymap.begin()
const_iterator
zurückgibt. Das liegt daran, dass mymap
in der Funktion, in die Sie dies geschrieben haben, const
ist, etwa wie folgt:
Das heißt, const
container (ob std::map
, std::vector
usw.) gibt const_iterator
zurück und nicht-const Container gibt iterator
zurück.
Jeder Container hat überladene Funktionen von begin()
und end()
. So ruft const
container das überladene begin()
auf, das const_iterator
zurückgibt und nicht-const container ruft das andere überladene begin()
auf, das iterator
zurückgibt. Und das gleiche für end()
überladene Funktionen.
Das Problem ist, dass mymap
im obigen Code eine konstante Map ist, keine veränderbare Map (vielleicht ist es ein Mitglied einer Klasse und dieser Code ist innerhalb einer konstanten Member-Funktion?). Daher wird der Aufruf von mymap.begin()
die Überladung aufheben, die ein const_iterator
anstelle der Überladung zurückgibt, die ein iterator
zurückgibt.
Wenn Sie den Container nicht über den Iterator ändern müssen, verwenden Sie const_iterator
. Wenn Sie beabsichtigen, die Map zu ändern, stellen Sie sicher, dass Sie ein nicht-konstantes Objekt für die Schleife verwenden (vielleicht sollte die Member-Funktion (falls das der Fall ist) nicht const sein?)