?
Blubbi456 schrieb:
Dass es mehr Pointer als nötig sind, ist mir bewusst, aber das war praktisch vorgegeben, damit wir den Umgang damit verstehen ... wobei mich das eher verwirrt muss ich ja sagen ^^;
Hmm - aber ganz so extrem muss es ja nicht sein.
Ausserdem brauchst Du ja nicht lernen, wie man es nicht macht, um zu begreifen, wie man es richtig macht.
Wie dem auch sei: ein zweidimensionales Feld von Pointern ist ineffizient und unnötig kompliziert.
Schau mal, wie sehr sich Dein Code vereinfacht, wenn Dein Spielfeld ein Feld* ist, dass Du im Konstruktor von Spiel allozierst.
struct Feld{
//...
};
struct Spiel{
Feld* f;
Spiel(){
f = new Feld[60*60];
// ....
}
~Spiel() { delete[] f; }
Feld& feld(int zeile, int spalte) { return f[zeile*60+spalte]; }
const Feld& feld(int zeile, int spalte) const { return f[zeile*60+spalte]; }
// ...
};
Zeile 11 und 12 ist ein allgemein bekannter Trick um den Zugriff über Zeile und Spalte auf ein eindimensionales Array zu ermöglichen. Nimm Dir ein Stück Karopapier und einen Bleistift um das nachzuvollziehen.
Referenzen ( Feld& als Rückgabe) kennst Du, oder?
Wirklich: Dein Ansatz mit der ganzen manuellen Speicherverwaltung ist nicht mit vernünftigen Aufwand korrekt hinzubekommen.
Viel Erfolg!