list oder vector oder array oder ???
-
Habe jetzt mal eine Klasse für die Koordinaten gebastelt:
#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";
ich dereferenziere also den Iterator-Zeiger 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 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
-
Zugriff über den iterator geht mit it->getx();
Was Dich da später ereilt ist const-correctness. Du legst ne const-Referenz auf das Objekt an. Das ist gut. Dann rufst Du getx auf, aber der Compiler weiß nicht, daß die Funktion das Objekt nicht verändern wird und verbietet Dir das daher. Du mußt dem Compiler noch mitteilen, daß Dein get const ist, also das Objekt nicht verändert:
class Koord { // ... double getX() const; // ... }; double Koord::getX() const { return x; }
-
Danke!
Darauf wäre ich wohl so schnell nicht selber gekommenGrüße
YvonneP.S.: gibt es noch Vorschläge bezüglich weiterer Klassen?