Du kannst kein „statisches Array“ anlegen, wenn der Speicherbedarf dem Compiler nicht bekannt ist. Diesen errechnet der Compiler anhand der angegebenen Elemente und dem Speicherbedarf (Typ) jedes Elementes. Aus diesem Grund musst Du Konstanten fuer das Array angeben.
In der klassen-Deklaration kannst Du es wie folgt machen:
enum {
MAX_ELEMS 100
};
int m_aryText[MAX_ELEMS];
Reinterpretiert wird hier nix. reinterpret_cast ist mit Vorsicht zu geniessen und zeugt immer von schlechtem Programmierstil. Ich empfehle reinterpret_cast nur in der COM-Programmierung.
Wenn dann vielleit dynamic_cast, denn dieser cast liefert einen NULL-Pointer (bei pointer-Cast) wenn der Cast schief geht und eine Exception vom Typ bad_cast, wenn der referenz-Cast schief geht. Beides kann man gut zur Laufzeit testen (auf NULL pruefen) oder try-catch (bei Referenzen).
Des weiteren gibt der new-Operator schon den richtigen Pointer-Typ zurueck.
Du musst Dein 2dim Array auf dem heap anlegen. z.B. so:
int (*z)[4] = new int [x][4];
x kann dabei variable sein. Diese 2dim Array ist im Speicher ja linearisiert sozusagen und z zeigt auf den Anfang des Arrays, dessen erstes Element widerum ein 4-elementiges int-Array darstellt. Wenn Du Pointer-Arithmetik macht, z.B. z+1, dann
wandert der pointer nicht im 4 bytes weiter (pro sizeof(int)), sondern um 4x4 Bytes weiter, all die weil ein Element des Arrays auf 2. Ebene eben 4 ints darstellen.
Aus diesem Grund kann x variable sein, aber nicht der Wert 4.
Oder z.B.:
float (*d)[4][5] = new float[y][4][5];
d ist dabei nicht ein Pointer auf ein float, sondern ein pointer aus 4*5 floats. Entfernen geht dann via:
delete [] d;
Wichtig ist oben auch
int (*z)[4] = …
und nicht z.B.:
int *z[4] = …
Denn dies waere ein 4-elementiges Array, dessen Elemente vom Typ Pointer auf int sind; was definitiv was anderes ist.
CU