new double[][] ??
-
Ist es moeglich, mehrdimensionale Arrays per new zu reservieren?
Folgendes funktioniert ja:double* bla = new double[20];Nun bruache ich aber auch etwas was wie folgt aussehen sollte:
double** blabla = new double[10][3];Dabei kriege ich allerdings folgende Meldung:
whatever.C:3: error: cannot convert `double (*)[4]' to `double**'Wie ist das zu loesen?
-
Du reservierst dir erst ein paar Pointer auf Double.
Und dann reservierst du auf diese Pointer die Doubles
(am besten in ner Schleife)double** bla = new double*[10]; for(int i=0; i< 10; ++i) bla[i] = new double[10];//EDIT:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39489.html
Dieser Faq-Eintrag zeigt noch ein paar andere Wege.
-
danke. Da ich mich ums Aufraeumen angeblich nicht kuemmern brauch/kann, und ich keinen Zugriff auf eine einwandfrei funktionierende STL hab UND Nachfolger mit wenig Programmierkenntnissen das wohl auch lesen koennen sollen, werd ich wohl die von dir beschrieben Methode nutzen. (Ihgitt
)
-
template<typename T> class arr_2d { public: arr_2d(std::size_t row, std::size_t col) : m_row(row), m_col(col) { m_data = new T[m_row * m_col]; } ~arr_2d() { delete [] m_data; } T* operator[](std::size_t row) { return &m_data[row * m_col]; } private: T* m_data; std::size_t m_row; std::size_t m_col; };ist aber echt primitiv ^^
-
Oder du scheibst
double *blabla = new double[10][3];
-
Naja wie man aus meiner oben geposteten Fehlermeldung schon sehen kann, kommt dann sowas:
whatever.C:3: error: cannot convert `double (*)[3]' to `double*'(zugegeben, diesmal ist nicht double** sondern double* das Konvertierungsziel, aber das macht keinen Unterschied im Ergebnis...
-
pumuckl schrieb:
Naja wie man aus meiner oben geposteten Fehlermeldung schon sehen kann, kommt dann sowas:
whatever.C:3: error: cannot convert `double (*)[3]' to `double*'(zugegeben, diesmal ist nicht double** sondern double* das Konvertierungsziel, aber das macht keinen Unterschied im Ergebnis...
Es steht doch alles da. Das Ergebnis von
new double[10][3]ist kein double* sondern ein double(*)[3] - ein Zeiger auf ein Array; also musst du nur blabla entsprechend deklarieren. C und C++ kennen eigentlich keine mehrdimensionalen Arrays im eigentlichen Sinn, dafür darf der Elementtyp eines Arrays selbst ein Array sein.
double(*blabla)[3] = new double[10][3];