Array von Objekten an Funktion übergeben
-
Hallo!
Ich versuche mich gerade an einer c++-Version des Game of Life. Jedes Feld ist dabei ein Objekt, die ich zu einem 2d-Array von Objekten (Spielbrett) zusammengesetzt habe.
Nun stehe ich vor dem Problem, dieses Array an Funktionen übergeben zu müssen, um es zu initialisieren bzw den nächsten Schritt zu berechnen. Hier ein Beispiel:
Funktion zum Initialisieren:void initialize(int xmax, int ymax, double p, Field a[][10]) { srand( (unsigned) time(NULL) ) ; for(int i=0;i<xmax;i++) { for(int j=0;j<ymax;j++) { int state = rand()%10; if(state<=p*10) state=0; else state=1; a[i][j].setState(state); cout << state; } cout << endl; } cout << endl; }Aufruf in main:
Field array[10][10] initialize(xmax, ymax, p, array);Kann mir jemand sagen, wo mein Fehler ist?
Kerstin
-
mit nem dynamischen "D- Array:
//ARRAY #define SIZE 20 int **ppArray = new int*[SIZE]; for(int i=0; i< SIZE; i++) ppArray[i] = new int[SIZE]; //FUNKTION (Zugriff über Pointer-Pointer) funktion(ppArray); void funktion(int **pArray){ int wert= pArray[0][0]; }wobei statt int dein Obkjekte Klassen name verwendet werden muss
-
Viele Dank für die schnelle Antwort. Dann wird es jetzt wohl Zeit, dass ich mich mit dynamischen Arrays und Pointern auf Pointer beschäftige... Wusste ich doch, dass ich mich nicht ewig drücken kann

-
Pointer sind gar nich so schlimm.. wenn man mal ein bischen ein Gefühl dafür hat .... machtrs sogar spass mit Pointer zu hantieren:)
und Array löschen mit "delete" nich vergessen.. was bei dem code oben nich implemnteioret ist.
-
Wenn du diese Variante gut findest, solltest du auch vector< vector< int > > in betracht ziehen. Richtig schön ist das ebenfalls nicht, aber besser als das Hantieren mit Arrays allemal. Besser ist ein echtes mehrdimensionales Array, wie etwas Boosts MultiArray - damit ist dann u.a. ein einfaches Iterieren über den gesamten Container möglich, so dass dann alle Operationen als normale Algorithmen auf Sequenzen formuliert lassen.
-
Stimmt, das mit den Pointern hat gar nicht weh getan. Und das Programm kompiliert fehlerfrei (bis jetzt...)
Lösche ich den Array dann einfach mit delete ppArray ? oder muss ich jedes Element einzeln löschen?
-
Faustregel: Zu jedem new ein delete.
Wenn also inkl. Schleife dort 21x mit new Objekte angefordert werden müssen hinterher auch 21 Objekte mit delete gelöscht werden.
-
Kerstin81 schrieb:
Stimmt, das mit den Pointern hat gar nicht weh getan. Und das Programm kompiliert fehlerfrei (bis jetzt...)
Lösche ich den Array dann einfach mit delete ppArray ? oder muss ich jedes Element einzeln löschen?Zu jedem new gehört ein delete.
-
for(int i=0; i< SIZE; i++) delete[] ppArray[i]; delete[] ppArray;
-
Synchronpunkt für LordJaxom und camper

Und ein Extrapunkt für BorisDieKlinge fürs Erraten meiner nächsten Frage
Wofür brauche ich die eckigen Klammern?
-
Du hast die Teilarrays per new**[]** angelegt, also mußt du sie auch mit delete[] wieder freigeben.
-
Ah, ok!
Wieder was gelernt
Vielen Dank für die Hilfe!Kerstin