2D-Array mit Konstruktor initialisieren, wie deklariere ich das Array in einem Struct
-
Hallo,
ich bin im Umgang mit C++ noch recht unerfahren. Wir haben diese Woche frisch angefangen mit dem Thema Speicherreservierung. Ich sitze an einer Aufgabe zur Matrixmultiplikation. Dazu sollen mittels eines struct 2D-Arrays ueber einen Konstruktor initialisiert werden. Mir ist klar, da diese während der Laufzeit initialisiert werden, und ich Speicher reservieren muss. Das habe ich jetzt wie folgt gelöst.struct Matrix{
int rows; int columns; int **mat; // Konstruktor Matrix(int InitRows, int InitColumns) { this->rows = InitRows; this->columns = InitColumns; // Feld von Zeigern auf Zeilen anlegen int **const mat = new int *[rows]; // Jeder Zeile Speicherplatz zuordnen for(int i = 0; i < rows ; i++) { mat[i] = new int[columns]; } // Belegung der Matrix mit Zahlen (aus externer Funktion) for(int m = 0; m < rows; m++) { for(int n = 0; n < columns; n++) { mat[m][n] = zufallszahl(); std::cout << mat[m][n] << "\t"; } std::cout << std::endl; } }
};
Zwei Dinge sind mir allerdings unklar. Habe ich das Array im struct so richtig deklariert? Wenn ich jetzt die Ausgabe auf der Konsole in eine seperate Methode packe, wird aber nichts mehr ausgegeben. Ich habe 2 Matrizen in der main Funktion mit Matrix A(rows, columns); Matrix B(rows, columns); die Zeilen und Spalten werden jeweils vom Benutzer eingegeben.
Es wäre schön, wenn mal jemand drüberschauen könnte und mir sagen könnte, wo ich falsch liege.
Vielen Dank schon mal,
-
Du zeigst keine main Funktion.
int **const mat = new int *[rows];
definiert und initialisiert eine lokale Variable.
-
Das ist die zugehörige main Funktion.
int main( ){
int rows, columns; std::cout << "Matrix A: Anzahl der Zeilen und Spalten eingeben:" << std::endl; std::cin >> rows >> columns; std::cout << "Matrix A:\n"; Matrix A(rows, columns); std::cout << "Matrix B: Anzahl der Zeilen und Spalten eingeben:" << std::endl; std::cin >> rows >> columns; std::cout <<"Matrix B:\n"; Matrix B(rows, columns); return 0;
}
Ich kann mit den Matrizen A und B als Objekte der Struct danach aber nicht weiterarbeiten. Das ist mein Problem.
-
@manni66 sagte in 2D-Array mit Konstruktor initialisieren, wie deklariere ich das Array in einem Struct:
int **const mat = new int *[rows];
definiert und initialisiert eine lokale Variable.
-
@tamoko
schau mal genau hin, wie du in dem Konstruktorrows
undcolums
einen Wert zuweist, und wie du das beimat
machst.
-
@tamoko sagte in 2D-Array mit Konstruktor initialisieren, wie deklariere ich das Array in einem Struct:
Das ist die zugehörige main Funktion.
...
Ich kann mit den Matrizen A und B als Objekte der Struct danach aber nicht weiterarbeiten. Das ist mein Problem.Und warum steht davon nichts im gezeigten Code?
-
@dirkb
Im Konstruktor fehlt zur Zuweisung noch ein:
this->mat = mat;Spielt es eine Rolle, ob ich dies vor der Belegung des Arrays mit Zahlen mache oder danach (also natürlich im Konstruktor)? Ich habe bislang in den Programmen nie im Konstruktor mit Schleifen etwas erzeugt, von daher ist das Neuland für mich.
-
Laß einfach den Typ weg (d.h. benutze gleich die Klassenvariable):
mat = new int *[rows];
-
Muss es wirklich ein new int blubb sein? Warum kein std::vector<int>, dann ein reserve(col*row) und einfach mit push_back(zufallszahl()) die Daten reintun.
-
vieleicht mal hier nachlesen:
https://www.c-plusplus.net/forum/topic/39489/dynamische-mehrdimensionale-arrays