Frage zu Programmaufbau/Typenverwendung [Array]
-
Hi.
Eigentlich bin ich wirklich kein Anfänger mehr was programmieren angeht.
Jedoch bisher hauptsächlich Java und C++ treibt mich teilweise in den Wahnsinn.Könnt ihr mir einfach mal einen prinzipiellen Tipp geben?!
Ich wollte eine Klasse Matrix schreiben mit folgenden Eigenschaften:
class Matrix { public: Matrix(int rows,int columns); ~Matrix(); private: int the_matrix[][]; };Wie die meisten wahrscheinlich schon gesehen haben, liegt das Problem in dem
privaten Datenelement the_matrix[][];.
Ich hatte ursprünglich vor, die Matrix im Konstruktor zu initialisieren.Matrix::Matrix(int rows,int columns) { the_matrix[rows][columns]; }Aber aaarrhhh es geht ja nicht, weil ein Array seine Grösse bereits bei der deklaration mitgeteilt bekommen muss.
Also dürfte the_matrix nicht als private variable auftauchen?!Wie soll ich das dann also machen?!
Es ist leider nicht das erste mal das ich an solchen absoluten trivialitäten scheitere
Irgendwelche Ideen, Tipps?! Wäre sehr dankbar.
-
Moin,
ja der erste Tipp von mir ist: Anstaendige Ueberschrift bitte! Leute ist das echt so
unglaublich schwer? Ich kann es nicht verstehn.Zu deinem Problem:
Du definierst dir das als Zeiger auf Zeiger:
int** the_matrix;Und dann im CTor entsprechend Speicher anfordern:
the_matrix = new int*[rows]; for(size_t i(0); i < rows; ++i) the_matrix[i] = new int[columns];mfg
v R
-
Mach aus the_matrix einen Pointer auf int und reserviere den Speicher mit new im Konstruktor.
Behalte im Hinterkopf, dass man Arrays mit delete [] freigeben sollte, nicht nur mit delete.
-
Folgnder Ansatz
Die Gesammtgroesse ist Max_Zeilen * Max_Spalten gebenen. Du kannst also entweder ein Array von der entsprechenden Groesse allocieren oder den Vector benutzen und mit der Gesamtgroesse initalisieren. Den Zugriff kannst Du dann schnell berechnen.
-
Danke für eure Antworten.
@ virtuell: Hast recht, mich nervt sowas sonst auch immer :).
Deswegen [edit!]
-
-
-
