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 mit

    cout << test.getx() << "\n";
    

    bekomme ich folgenden Fehler:
    error C2662: 'Koord::getx': this-Zeiger kann nicht von 'const Koord' in 'Koord &' konvertiert werden 😮

    Kann 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 gekommen 😉

    Grüße
    Yvonne

    P.S.: gibt es noch Vorschläge bezüglich weiterer Klassen?


Anmelden zum Antworten