Problem mit Iteratoren



  • Ich habe verschiedene Klassen die von einem Objekt vererbt sind. Eine Liste aus verschiedenen Objekten soll nach aktiven Objekten durchsucht werden und den Typ des aktiven Objekts zurückgeben.

    Soweit ich weiss kann man mit dem Iterator direkt auf Funktionen zugreifen, leider muss ich wegen der Vererbung Objekt-Pointer benutzen, deshalb gibt er mir immer folgende Fehlermeldung aus:

    "error C2227: left of '->getName' must point to class/struct/union"

    class Objekt
    {
    ...
    bool istAktiv() {...}
    virtual std::string getTyp() = 0;
    }
    
    class ObjektA : public Objekt
    {
    virtual std::string getTyp() { return "Typ A"; }
    ...
    }
    
    ...
    
    std::vector<Objekt*>::iterator it;
    it = ObjektContainer.begin();
    while (it != ObjektContainer.end())
    {
             if(it->istAktiv() == true)
    	 {
    	    return it->getName();
    	 }
    it++;
    }
    

    Wie kann ich auf die Funktionen zugreifen? Liegt es daran dass ich einen Pointer auf einen Pointer habe (Iterator ist ein Pointer der auf einen Pointer des Objekts zeigt)?



  • Hi,

    deine Vermutung war schon richtig.
    Du musst erst dein Iterator dereferenizieren, dann hast du ein Object*, also nen Zeigen. Dann noch ein -> und du kannst deine Funktion erreichen.

    (*it)->Funktion();


Anmelden zum Antworten