dynmischer Array
-
hi
Schon wieder so eine Anfängerfrage

Warum funktioniert das nicht?
double *Mat; int max_columns=0; int line_counter = 0; int column_counter = 0; //Hier werden line_counter und max_columns ermittelt Mat = new double[line_counter][max_columns];Kriege bei Visual Studio folgende Fehlermeldung:
error C2440: '=' : 'double (*)[1]' kann nicht in 'double *' konvertiert werden
-
Das ist nicht das, was du glaubst, dass es ist.

Probiers mal so:
Mat = new double[line_counter*max_columns];
-
new kann nur ein eindimmensionales array allokieren d.h. du musst
jede spalte einzeln allokierendouble **ptr; ptr = new double *[num_rows]; for (unsigned i = 0; i < num_rows; ++i) ptr[i] = new double[num_colums]; // und wieder löschen for (unsigned i = 0; i < num_rows; ++i) delete[] ptr[i]; delete[] ptr;oder um die c++ version zu nehmen
#include <vector> std::vector<std::vector<double>> Mat; Mat.resize(num_rows); for (unsigned i = 0; i < Mat.size(); ++i) Mat[i].resize(num_colums);bei der C++ version brauchst du dich nicht ums löschen zu kümmern
-
Und das geht natürlich auch mit beliebig vielen Dimensionen:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-211534-and-highlight-is-.html
-
Hallo nochmal
Deine C++-Version funktioniert bei mir leider nicht.
vector<vector<double>> Mat;Ergibt Fehlermeldung:
error C2146: Syntaxfehler : Fehlendes ',' vor Bezeichner 'Mat'
error C2065: 'Mat' : nichtdeklarierter Bezeichner
error C2143: Syntaxfehler : Fehlendes '>' vor ';'
-
Das geht auch kürzer.
#include <vector> std::vector<std::vector<double> > Mat(num_rows, std::vector<double>(num_colums));
-
sorry, es geth doch.
-
helferlein schrieb:
oder um die c++ version zu nehmen
Nur als Anmerkung:
newunddeletesind reines C++. Die STL ist einfach praktischer und sicherer.
pitaz schrieb:
vector<vector<double>> Mat;Du solltest darauf achten, dass bei verschachtelten Templates die schliessenden Klammern durch einen Leerschlag getrennt sind.
>>geht zwar bei gewissen Compilern, manchmal wird es aber auch alsoperator>>interpretiert. Deshalb> >.