Auf Objekte in std::list zugreifen



  • Hallo alle miteinander.

    Ich habe folgende Frage. Wenn ich eine Liste habe die wie folgt definiert ist:

    std::list<CCabinController*> m_pCabinControllers;
    

    und ich nun ein Schleifenkonstrukt bauen möchte mit dem ich die ganze Liste durchgehe und eine bestimmte Funktion (pushEvent()) der Klasse CCabinController aufrufen möchte
    dann gehe ich doch so vor, oder? :

    std::list<CCabinController*>::iterator it;
    for (it = m_pCabinControllers.begin(); it != m_pCabinControllers.end(); it++)
    	{
    		it->pushEvent(FIREALERT)
    	}
    

    Zumindest kenne ich diese Form von maps. Die habe ich vor kurzem kennen gelernt. Mit dem Unterschied das man der map noch sagen muss ob man den key (first) oder die value (second) haben will.

    Meinem Compiler gefällt mein Ansatz jedoch nicht.
    Was mache ich falsch ?

    Viele Grüße
    Luke


  • Mod

    Luke411 schrieb:

    Meinem Compiler gefällt mein Ansatz jedoch nicht.

    Wenn dein Computer so launisch ist, solltest du ihm vielleicht einfach gut zureden?



  • Dein Listenelement ist ein POINTER auf ein CCabinController-Objekt. Der Iterator zeigt auf die Position. Mit it-> bekommst du das Listenelement bzw. könntest den CabinController nutzen, wenn er direkt in der Liste wäre (also bei list<CCabinController> . Das ist hier aber ein CCabinController* . Wenn du den auflösen willst, musst du also 2x den * verwenden. Also nutze hier (*it)->pushEvent(...) .

    Einfacher ists, wenn du Range-for verwendest:

    for (auto &pcc : m_pCabinControllers) {
        pcc->pushEvent(FIREALERT);
    }
    


  • @wob

    Das klappt so. Vielen Dank für deine Hilfe.

    Viele Grüße
    Luke


Anmelden zum Antworten