Verkettete Liste und Pointer
-
Moin beisammen.
Habe eine Abstrakte Basisklasse CFigure erstellt, die die Methode move() besitzt. Pawn und Rook besitzen diese auch und ich wollte mal testen ob alles so klappt wie ich mir das im Kopf zusammengesponnen habe.
Die normale Ausführung der Methoden klappt auch, allerdings funktioniert das ganze nicht wenn ich eine Verkettete Liste von Datentyp der Basisklasse als Pointer anlege (was ich ja tun muss (also als Pointer), wenn ich alle von CFigure abgeleiteten Klassen in einer Liste verwalten will)
Allerdings scheine ich bei dem Zugriff auf das Element mit dem Iterator einen Fehler zu machen und ich finde dazu keine Lösung.
int main() { list<CFigure*> oFigureList; CFigure *poFigure; poFigure = new CPawn; oFigureList.push_back(poFigure); poFigure = new CRook; oFigureList.push_back(poFigure); list<CFigure*>::iterator iFigures; for(iFigures = oFigureList.begin(); iFigures != oFigureList.end(); ++iFigures) { *iFigures->move(); // Hier ist der Fehler !!! }; _getch(); if(poFigure) { delete poFigure; poFigure = NULL; }; return 0; };Wie genau greife ich richtig auf das Element zu?
Gruß, Kane
-
Du solltest die Speicherverwaltung list überlassen und sie folgendermaßen nutzen:
list<CFigure> oFigureList;List erzeugt die Objekte schon, auf dem Heap. Mal abgesehen davon, geht bei dir ein Obejkt verloren, weil du nur das zuletzt andelegt wieder löschst. Außerdem würdest du(für andere Situation) folgendermaßen auf dein Onjekt zugreifen:
(*iFigures)->move();
-
Da er die Objekte in seiner Liste polymorph nutzen will muß er schon Pointer nehmen.
-
Stimmt, mein Fehler
