Konstruktor
-
Also erzeugt und zugewiesen werden sie in der main-Funktion einer anderen Klasse.
Hier ein Code-Snippet:main(void) { person* first = new person("Valentino", "Rossi", "via Bologna 84",1); building woko_first(1,2,4); woko_first.assign_room(first,2,4); /... }Allerdings gelingt es mir trotzdem nicht, die Person-Objekte zu deleten.
-
Einfachste Lösung: Wenn die main()-Funktion die Personen anlegt, sollte sie sie auch wieder löschen

Nächstbeste Lösung: Verwende einen vernünftigen Smart-Pointer anstelle der nackten Zeiger (z.B. shared_ptr)
Wenn du dich unbedingt selber darum kümmern willst, mußt du mit einer doppelten Schleife durch den Vector durchlaufen und jedes einzelne Element per delete löschen.
PS:
MaxC++ schrieb:
building woko_first(1,2,4); woko_first.assign_room(first,2,4); }Autsch - Die Indizes beginnen bei 0, d.h. der Raum 2/4 liegt außerhalb des vom Vector verwalteten Speicherbereiches.
-
Okey, angenommen, ich entscheide mich für die Schleifen-Methode.
Wie bekomm ich da den Vektor mit den jeweiligen Elementen?
Ich dachte, ich könne die Personen einfach per "person::person[1]" erreichen.Zu deiner Bemerkung:
Schau Dir mal das Header-File aus einem vorherigen Post an. Das ist doch so gedacht, oder seh' ich das falsch?
-
Du erreichst die Person (bzw. den person*-Zeiger im Vector) in Raum y aus Etage x per
_assignments[x-1][y-1]- zum Löschen mußt du alle Kombinationen von x und y durchlaufen.MaxC++ schrieb:
Zu deiner Bemerkung:
Schau Dir mal das Header-File aus einem vorherigen Post an. Das ist doch so gedacht, oder seh' ich das falsch?Stimmt auch wieder - da mußt du dann in allen Methoden die Koordinaten umrechnen.
-
Jeps, hab ich gemacht. (sehr mühsam..aber was solls)
Dafür klappt nun alles. YES
Vielen Dank für die Hilfe!
-
PS: Kann ich das so machen, oder funktioniert es nur "per Zufall"?
Weil irgendwie hab ich mir das komplizierter vorgestellt.for(int x=1; x<_floors; x++) { for(int y=1; y<_rooms_per_floor; y++) { delete _assignments[x-1][y-1]; } }
-
Genau so habe ich das gemeint - nur solltest du nochmal nachzählen, ob du mit der Schleife wirklich alle Einträge erwischst.
-
Eben..deshalb die PS-Frage

..aber ich denke, dass ich so alle Einträge erreichen sollte, weil die Schleifen ja verschachtelt sind, und nicht nacheinander einzeln aufgerufen werden.
Mit den Beispiel-Werten funktioniert's auf alle Fälle.
-
Leide nicht - Die Schleifen selber sind in Ordnung, die Abbruchbedingungen stimmen nicht ganz (du verfehlst das Dachgeschoß und den letzten Raum jeder Etage).
-
Also einfach wie folgt korrigieren?
for(int x=1; x<_floors+1; x++) { for(int y=1; y<_rooms_per_floor+1; y++) { delete _assignments[x-1][y-1]; } }
-
Warum nutzt du nicht einfach die size() Funktion des Vektors oder Iteratoren?
-
Braunstein schrieb:
Warum nutzt du nicht einfach die size() Funktion des Vektors oder Iteratoren?
Wäre zu einfach.