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
-
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 beilist<CCabinController>
. Das ist hier aber einCCabinController*
. 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); }
-