Fehlermeldung MS Visual Studio bei Ausgabe eines String-Values einer map
-
Hallo zusammen,
ich bin neu hier und ebenfalls ein Anfänger in C++. Ich hoffe, dass ich hier ins richtige Unterforum poste.Ich bekomme bei folgendem Code:
for (map<int, string>::const_iterator it = m.begin(); it != m.end(); ++it) { cout << it->first << ' ' << it->second << endl;
bei dem zweitletzten "<<" einen Fehler angezeigt und der Code kompiliert nicht.
Laut VS kennt er keinen "<<"-Operator, der einen Operanden vom Typ "const std::string" akzeptiert (Fehlercode C2679). Dabei steht der Code so 1 zu 1 in meinem Skript. Kann es sein, dass ich etwas übersehe oder bei mir in VS verstellt habe?MfG
uncle bens
-
Da der Code so korrekt ist (unter der Annahme von using namespace std), muss der Fehler anderswo sein. Die vollständige Fehlermeldung wäre hilfreich, NICHT eine Beschreibung, was der Fehler aussagt.
-
Ist
#include <string>
vorhanden?
-
OMG es lag wirklich an daran, dass ich #include <string> vergessen habe
vielen Dank für eure Hilfe und sorry für die blöde Frage ^^
Gruß
uncle bens
-
Ich hätte aber bezüglich einer map über die man mit einem Iterator oder Const-Iterator läuft nochmal ein paar Fragen:
for (auto it = m.cbegin(); it != m.cend(); ++it) {
das scheint ja zu gehen und wenn ich cbegin() und cend() verwende, so wird it zu einem Const-Iterator. Wenn ich stattdessen m.begin() und m.end() verwende, so wird it zu einem Nicht-Const-Iterator, richtig?
for (const auto it = m.cbegin(); it != m.cend(); ++it) {
das wiederum funktioniert jetzt nicht. Macht nun das const den Const-Iterator konstant?
-
uncle bens schrieb:
for (const auto it = m.cbegin(); it != m.cend(); ++it) {
das wiederum funktioniert jetzt nicht. Macht nun das const den Const-Iterator konstant?
Die Anweisung ++it verändert wie Variable "it", was für eine Konstante natürlich nicht erlaubt ist.
Du könntest aber auch range-based-for verenden:
for (const auto& p : m) cout << p.first << " " << p.second << "\n";
-
ok, dann scheine ich den zweiten Codeteil richtig verstanden zu haben. Ist halt nur etwas komisch einen konstanten Const-Iterator zu haben.
Die neue for-Schleife mit const-Referenz werde ich wohl auch zukünftig überwiegend verwenden. Möchte nur die Funktion von auto in Verbindung mit Iteratoren mal grundlegend verstanden haben