Iterator auf Objekte
-
Hallo,
nachdem die Antworten zu meinem Thema 'list oder array oder vector oder ???' nun schon 5 Seiten umfassen, möchte ich mein letztes Thema unter einem neuen Titel veröffentlichen:
Also, ich habe folgende Klasse geschrieben:#include "Koord.h" Koord::Koord(){} Koord::Koord(double x, double y){ itsx=x; itsy=y; } Koord::~Koord(){} double Koord::getx(){ return itsx; }
mit den privaten Datenelementen double itsx und double itsy.
ich versuche nun nach:
list<Koord> koordList; double x,y; while(fin>>x>>y){ double x, y; fin >> x >> y; koordList.push_back(Koord(x,y)); } fin.close()
mit:
for(list<Koord>::const_iterator ci = koordList.begin(); ci!=koordList.end(); ++ci) cout <<*ci << "\n";
den Iterator-Zeiger zu dereferenzieren und erhalte dann was??? Wie komme ich an die Inhalte meiner Objekte? **ci geht nicht und *ci->getx() auch nicht
Bin etwas ratlos
???
:xmas1:
-
Also ich habe es folgendermaßen (mehr schlecht als recht) gelöst:
for(list<Koord>::const_iterator ci = koordList.begin(); ci!=koordList.end(); ++ci){ const Koord& test = *ci; cout << test.itsx << "\n"; }
Damit das funktioniert mußte ich meine Datenelemente public setzten, was ich eigentlich nicht wirklich will
Aber mitcout << test.getx() << "\n";
bekomme ich folgenden Fehler:
error C2662: 'Koord::getx': this-Zeiger kann nicht von 'const Koord' in 'Koord &' konvertiert werdenKann mir das jemand erklären???
Grüße
Yvonne
-
Wenn du den operator-> benutzt, wird bereits dereferenziert, d.h. das * vor ci kannst du weglassen. ci->getx() ist äquivalent zu (*ci).getx().
-
cout << ci->getx()
liefert mir folgenden Fehler:error C2662: 'Koord::getx': this-Zeiger kann nicht von 'const std::allocator<_Ty>::value_type' in 'Koord &' konvertiert werden with [_Ty=Koord]
-
Man darf wohl nicht const_iterator sondern nur iterator verwenden, dann funktionierts...
const_iterator habe ich hergenommen, weil es im MSDN-Beispiel auch so verwendet wurde, ohne genau nachzudenken, wobei das wahrscheinlich auch nicht viel gebracht hätte, was macht den const_iterator? Darf man dabei den Iterator-Wert nicht verändern?
Grüße
Yvonne
-
In dem anderen Beitrag hab ich erklärt wie man das umgeht und was das Problem ist.
-
Danke!
Darauf wäre ich wohl so schnell nicht selber gekommenGrüße
YvonneP.S.: gibt es noch Vorschläge bezüglich weiterer Klassen?