kleines Iterator-Problem
-
Hallo!
Ich bin bei meiner Printfunktion auf ein seltsames Assertion-Fail-Problem gestoßen, dass ich bis jetzt nicht lösen konnte!
Kann mir jemand von euch erklären, wie dieser Fehler Zusatnde kommt?
Ich kann auch auf einmal kein Iter++ mehr machen...//--------------------------------------------- // Class CardReader //--------------------------------------------- class CardReader{ public: CardReader(); ~CardReader(); typedef std::vector<CardInformation> CardVector; typedef CardVector::iterator CardIterator; CardVector GetVector() const; CardIterator GetIterator() const; void PushVector(CardInformation const & CI); void ClearVector(); void Print(std::ostream & ost) const; // all public information private: // all private information CardVector Vect; CardIterator Iter; }; //--------------------------------------------- // Klasseninterne Funktionen //--------------------------------------------- CardReader::CardReader(): Iter(Vect.begin()) {} CardReader::~CardReader() {} CardReader::CardVector CardReader::GetVector() const {return Vect;} CardReader::CardIterator CardReader::GetIterator() const {return Iter;} void CardReader::PushVector(CardInformation const & CI) {Vect.push_back(CI);} void CardReader::ClearVector() {Vect.clear();} void CardReader::Print(std::ostream & ost) const { // Zugriff auf PrivateMember funktioniert nicht (Iterator-Fehler) size_t counter = 1; ost << "--------------------[Print: Vector]--------------------" << endl; for (Iter; Iter != Vect.end(); Iter) { ost << "Karte aus VektorPosition " << counter << endl; ost << cPictureLink << " " << Iter->PictureLink << endl; ost << cCardName << " " << Iter->CardName << endl; ost << cEdition << " " << Iter->Edition << endl; ost << cRareness << " " << Iter->Rareness << endl; ost << cColour << " " << Iter->Colour << endl; ost << cManaCosts << " " << Iter->ManaCosts << endl; ost << cCardType << " " << Iter->CardType << endl; ost << cPrice << " " << Iter->Price << endl; ost << cTournaments << " " << Iter->Tournaments << endl; ost << cCardText << " " << Iter->CardText << endl; counter++; } ost << "--------------------[Print: End]--------------------" << endl; }//--------------------------------------------- // Typedefs, Structs //--------------------------------------------- std::string static const cPictureLink = "PictureLink"; std::string static const cCardName = "CardName"; std::string static const cEdition = "Edition"; std::string static const cRareness = "Rareness"; std::string static const cColour = "Colour"; std::string static const cManaCosts = "ManaCosts"; std::string static const cCardType = "CardType"; std::string static const cPrice = "Price"; std::string static const cTournaments = "Tournaments"; std::string static const cCardText = "CardText"; struct CardInformation{ std::string PictureLink; std::string CardName; std::string Edition; std::string Rareness; std::string Colour; std::string ManaCosts; std::string CardType; std::string Tournaments; std::string CardText; double Price; };
-
Verwendete Includes
#include <fstream> #include <iostream> #include <string> #include <vector> #include <iterator>Fehlermeldung:
Expression: vector Iterators incompatible
-
Was ist CardVector und CardIterator? Es liegt ja offensichtlich an diesen Klassen.
-
Screib einmal in der loop
Iter = Vect.begin()Statt
Iter;
-
Hallo
leider geht das scheinbar nicht kein Ahnung warum aber er kennt hier den zuweisungsoperator einfach nicht! ebenso wie er den inkrementoperator nicht kennt!
for (Iter = Vect.begin(); Iter != Vect.end(); Iter++) { // ... }Hier kennt er weder den ++ - Operator noch den = - Operator....sehr setlsam ich glaube ich hab das schon gut 100mal so gemacht und hatte noch nie probs damit oO
-
Du brauchst einen const_iterator.
-
IrgendeinName schrieb:
Was ist CardVector und CardIterator? Es liegt ja offensichtlich an diesen Klassen.
der typedef dafür steht in der Klasse im public teil!
-
Kellerautomat schrieb:
Du brauchst einen const_iterator.
ändert leider auch nichts daran, dass die beiden operatoren nicht erkannt werden, aber danke für den Hinweis
-
Zeig doch mal Fehlermeldungen, dann kann man dir besser helfen.
-
Ratatosky schrieb:
Hallo
leider geht das scheinbar nicht kein Ahnung warum aber er kennt hier den zuweisungsoperator einfach nicht! ebenso wie er den inkrementoperator nicht kennt!
for (Iter = Vect.begin(); Iter != Vect.end(); Iter++) { // ... }Hier kennt er weder den ++ - Operator noch den = - Operator....sehr setlsam ich glaube ich hab das schon gut 100mal so gemacht und hatte noch nie probs damit oO
Wo stehen die includes?
-
Kellerautomat schrieb:
Zeig doch mal Fehlermeldungen, dann kann man dir besser helfen.
Kein "="-Operator stimmt mit diesen Operanden überein.
Kein "++"-Operator stimmt mit diesen Operanden überein.
-
IrgendeinName schrieb:
Ratatosky schrieb:
Hallo
leider geht das scheinbar nicht kein Ahnung warum aber er kennt hier den zuweisungsoperator einfach nicht! ebenso wie er den inkrementoperator nicht kennt!
for (Iter = Vect.begin(); Iter != Vect.end(); Iter++) { // ... }Hier kennt er weder den ++ - Operator noch den = - Operator....sehr setlsam ich glaube ich hab das schon gut 100mal so gemacht und hatte noch nie probs damit oO
Wo stehen die includes?
Sowohl im header als auch im Cpp file atm
-
Ratatosky schrieb:
Kellerautomat schrieb:
Zeig doch mal Fehlermeldungen, dann kann man dir besser helfen.
Kein "="-Operator stimmt mit diesen Operanden überein.
Kein "++"-Operator stimmt mit diesen Operanden überein.typedef std::vector<CardInformation> CardVector; typedef CardVector::iterator CardIterator;Schreib mal statt Zeile 2
typedef std::vector<CardInformation>::iterator CardIterator;
-
Sone schrieb:
Ratatosky schrieb:
Kellerautomat schrieb:
Zeig doch mal Fehlermeldungen, dann kann man dir besser helfen.
Kein "="-Operator stimmt mit diesen Operanden überein.
Kein "++"-Operator stimmt mit diesen Operanden überein.typedef std::vector<CardInformation> CardVector; typedef CardVector::iterator CardIterator;Schreib mal statt Zeile 2
typedef std::vector<CardInformation>::iterator CardIterator;Gute Idee, ändert aber leider ebenfalls nichts an den beiden Fehlermeldungen, der Iterator wird nach wie vor nicht als ein iterator auf einen CardVector wahrgenommen wie es scheint...
-
Naja print() ist const, aber dann weist du ein Member zu (
Iter = Vect.begin())...
Das kann ja nicht gut gehen...Nimm doch einfach einen const_iterator, den Du in der for schleife definierst.
-
Furble Wurble schrieb:
Naja print() ist const, aber dann weist du ein Member zu (
Iter = Vect.begin())...
Das kann ja nicht gut gehen...Nimm doch einfach einen const_iterator, den Du in der for schleife definierst.
Ah danke stimmt jetzt funktionierts!
An alle die Mitgeholfen haben, vielen Dank!
Problem gelöst
-
Furble Wurble schrieb:
Naja print() ist const, aber dann weist du ein Member zu (
Iter = Vect.begin())...
Das kann ja nicht gut gehen...Nimm doch einfach einen const_iterator, den Du in der for schleife definierst.
Mist
Das wollte ich genau in diesem Moment schreiben.
-
IrgendeinName schrieb:
Furble Wurble schrieb:
Naja print() ist const, aber dann weist du ein Member zu (
Iter = Vect.begin())...
Das kann ja nicht gut gehen...Nimm doch einfach einen const_iterator, den Du in der for schleife definierst.
Mist
Das wollte ich genau in diesem Moment schreiben.Brauchst du den Ruhm, das Problem geloest zu haben?
Ratatosky schrieb:
Sone schrieb:
Ratatosky schrieb:
Kellerautomat schrieb:
Zeig doch mal Fehlermeldungen, dann kann man dir besser helfen.
Kein "="-Operator stimmt mit diesen Operanden überein.
Kein "++"-Operator stimmt mit diesen Operanden überein.typedef std::vector<CardInformation> CardVector; typedef CardVector::iterator CardIterator;Schreib mal statt Zeile 2
typedef std::vector<CardInformation>::iterator CardIterator;Gute Idee, ändert aber leider ebenfalls nichts an den beiden Fehlermeldungen
Sollte es auch nicht
