Kompilierfehler mit Map-Iteratoren

8

In meiner Header-Datei habe ich die std :: map eingefügt und verwende den entsprechenden Namespace.
Einer meiner Mitglieder ist:

%Vor%

Und in meiner .cpp-Datei versuche ich etwas zu tun, was ich schon seit einiger Zeit häufig mache:

%Vor%

Das Obige wird sogar in einem der Beispiele für die Verwendung von std :: map bei cplusplus.com erwähnt. Obwohl ich in anderen Teilen des Codes, die keine Kompilierungsfehler verursachen, ziemlich genau das gleiche getan habe, erhalte ich in dieser Zeile folgenden Fehler von Cygwin:

%Vor%

Was mir seltsam vorkommt. Irgendeine Idee, was könnte falsch sein? (Mein Header ist natürlich in meiner .cpp enthalten)

    
jathanasiou 06.01.2012, 01:42
quelle

4 Antworten

16

Es scheint, dass in dem Bereich, in dem diese Schleife existiert, die Map const ist. Ist zum Beispiel die Schleife in einer Klassenmethode wie const deklariert?

%Vor%

oder als const-Argument übergeben, so?

%Vor%

Wenn dies der Fall ist, müssen Sie Const-Iteratoren verwenden:

%Vor%

Wenn Sie C ++ 11 verwenden, sollten Sie das Schlüsselwort auto verwenden:

%Vor%

Da Sie in dem Fall, in dem Sie gezeigt haben, const-Iteratoren verwenden müssen, können Sie sie nicht zum Ändern der Karte oder der darin enthaltenen Daten verwenden. Das ist korrekt, und es ist eine gute Sache:).

    
Liam M 06.01.2012, 01:59
quelle
3

Nun, der Fehler besagt, dass Sie versuchen, einen Const_iterator auf einen Iterator zu setzen. Sie sagen, dass pT_Spam ein Mitglied ist. Ist es ein Mitglied eines const Objekts? Wenn dies der Fall ist, geben begin () und end () const_iterators zurück.

    
Peter Milley 06.01.2012 01:55
quelle
2

Sie müssen const_iterators für Maps verwenden, also sollte es sein:

%Vor%

Edit: Wie bereits oben erwähnt, ist das richtig, aber für ganz falsche Gründe (Maps haben nicht-konstante Iteratoren. Was habe ich genau gedacht? Ich weiß es nicht). Höchstwahrscheinlich ist Ihre Karte als const definiert (wie in einer anderen Antwort angegeben).

    
Yuushi 06.01.2012 01:50
quelle
1

für (map :: iterator it = pT_Spam.begin (); it! = pT_Spam.end (); it ++)

chage es zu

für (map :: const_iterator = pT_Spam.begin (); it! = pT_Spam.end (); it ++)

Da es auf einen konstanten Wert zeigt, muss der Iterator ebenfalls vom Typ const sein.

    
Kapil Dev 16.12.2015 20:26
quelle

Tags und Links