Noch ein kleiner Nachtrag. Das Programm kann mit >1-dimensionalen Arrays gar nicht funktionieren aus einem einfachen Grund.
Bekanntermaßen werden Arrays im Speicher so angelegt:
int a[4]
(Bytes) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | a[0] | a[1] | a[2] | a[3] |
Wenn ich jetzt einen mehrdimensionalen Array verwende, ist die Anordnung im Speicher folgendermaßen:
int a[2][2]
(Bytes) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | a[0][0] | a[0][1] | a[1][0] | a[1][1] |
d.h. wenn ich einem array z.B. "int feld[20][6]" anlege, dann "weiß" der Compiler, daß feld[0][0] und feld[1][0] genau 6 x sizeof(int) voneiander entfernt sind. Da die Zahlen bei der Array-Deklaration statisch sind, weiß das die Funktion, an die der Anfangszeiger des Arrays übergeben wird, nicht mehr; der Aufruf feld[2][2] ist hier mehrdeutig, da die exakte Position im Speicher für den Compiler nicht bestimmbar ist.
Lösungsmöglichkeiten (zumindest was mir jetzt einfällt): 1. das, was ich heute morgen schon gemailt habe (static cast + eindimensionale Behandlung in der Funktion)
2. vector<vector<int> > verwenden
3. den Array global setzen.
4. einen Array von int-Pointern (die dann ihrerseits wieder auf Arrays zeigen können), ähnlich wie bei "char ** argv"
5. eine rudimentäre Klasse schreiben, die den Zugriff auf den Array kapselt. Wenn du mit dem Array noch mehr anstellen willst als nur Daten zu speichern, wäre das sogar zu empfehlen.
ciao, Ulf
PS: da mir die ganzen Weihnachtsgrüße allmählich zum Hals raushängen, wünsche ich hier schon mal vorausschauend ein gesundes neues Jahr :).