Problem mit mehrdimensionalen Arrays

Hi, ich ein Problem beim Programmieren. Es geht um folgenden Code:

const int zeile = 37;
const int spalten = 255;
char zeichen[zeile][spalten];
int i = 0;
zeichen[i][0] = ‚a‘;

wenn ich den Code durch den Cbuilder-Compiler jage, werden folgende Fehlermeldungen produziert:

[C++ Fehler] Unit1.cpp(15): E2313 Konstantenausdruck erforderlich
[C++ Fehler] Unit1.cpp(15): E2021 Array muß mindestens ein Element enthalten.
[C++ Fehler] Unit1.cpp(15): E2238 Bezeichner ‚zeichen‘ mehrfach deklariert
[C++ Fehler] Unit1.cpp(13): E2344 ‚zeichen‘ bereits deklariert
[C++ Fehler] Unit1.cpp(15): E2275 { erwartet

Der Fehler liegt in der letzten Zeile des Codes
(zeichen[i][0] = ‚a‘:wink:, denn wenn ich diese Zeile auskommentiere, compiliert das Programm.
Ich habe den Code dann mal einem Klassenkameraden gegeben und der konnte den Code problemlos compilieren. Ich weiss nicht welchen Compiler er benutzt hat, es war aber nicht der des Cbuilders. Ist bei meinem CBuilder etwas falsch eingestellt? Könnt ihr mir weiterhelfen?

Hallo Fragewurm,

Hi, ich ein Problem beim Programmieren. Es geht um folgenden
Code:

const int zeile = 37;
const int spalten = 255;
char zeichen[zeile][spalten];
int i = 0;
zeichen[i][0] = ‚a‘;

wenn ich den Code durch den Cbuilder-Compiler jage, werden
folgende Fehlermeldungen produziert:

[C++ Fehler] Unit1.cpp(15): E2313 Konstantenausdruck
erforderlich
[C++ Fehler] Unit1.cpp(15): E2021 Array muß mindestens ein
Element enthalten.
[C++ Fehler] Unit1.cpp(15): E2238 Bezeichner ‚zeichen‘
mehrfach deklariert
[C++ Fehler] Unit1.cpp(13): E2344 ‚zeichen‘ bereits deklariert
[C++ Fehler] Unit1.cpp(15): E2275 { erwartet

Der Fehler liegt in der letzten Zeile des Codes
(zeichen[i][0] = ‚a‘:wink:, denn wenn ich diese Zeile
auskommentiere, compiliert das Programm.

Da ist der Fehler NICHT, du verwechselst hier Ursache und Wirkung.
Erst dadurch, dass „zeichen“ VERWENDET wird merkt der Compiler, dass da was nicht stimmt.
Also, wenn du kein Benzin im Tank hast und deshalb das Auto nicht starten kanns, liegt der Fehler nicht beim Zündschlüssel.

Ein weiterer Typ: Bei C steckt der Fehler immer in der angegeben Zeile oder oberhalb.

Aber jetz mal im Datail:

char zeichen[zeile][spalten];

benötigt Konstanten für die Dimensionen (zeile, spalten).

const int zeile = 37;
Deklariert keine Konstante (!!) sondern eine Variable, welche du nicht ändern kannst, das ist halt nicht das Selbe. z.B. kannst du in Modul A folgendes stehen haben:
int zeile = 37;
in Modul B steht dann:
const int zeile;
Dadurch erreichst du, dass Modul B den Wert von „zeile“ zwar lesen, aber nicht ändern kann, in Modul A ist die Variable aber eine ganz normale.

in deinem Fall musst du den Code etwas omschreiben:
#define zeile 37
#define spalten 255

Dann funktioniert es.

Möglicherweise giebt es allerdings schon irgendwo einen Bezeichner „zeichen“ deshalb die Meldung:

[C++ Fehler] Unit1.cpp(15): E2238 Bezeichner ‚zeichen‘ mehrfach deklariert

Da du aber nur den halben Code gepostet hast, nützen mir die Zeilennummern herzlich wenig !!

Dein Freund hat wohl mit einem Compiler übersetzt welcher nicht so ganz dem ANSI-Standard entspricht, oder er hat die Fehlermeldungen halt einfach abgeschaltet.

MfG Peter(TOO)

Hallo,

const int zeile = 37;
const int spalten = 255;
char zeichen[zeile][spalten];
int i = 0;
zeichen[i][0] = ‚a‘;

wenn ich den Code durch den Cbuilder-Compiler jage, werden
folgende Fehlermeldungen produziert:

[C++ Fehler] Unit1.cpp(15): E2313 Konstantenausdruck erforderlich

die definition eines statischen arrays erfordert
einen ‚compile time‘-const Ausdruck. Manche Compiler
lassen ‚const int‘ nicht als solchen gelten.

Ersetze zu:

#define zeile 37
#define spalten 255

bei manchen geht auch:

enum my_const_values {
zeile = 37;
spalten = 255;
};

Hoffentlich habe ich das Problem erfasst
und nicht noch die Konfusion erhöht :wink:

Grüße

Also ich habe den Code jetzt umgeschrieben, wie ihr es mit empfohlen habt, aber es funktioniert immer noch nicht. Es kommen die selben Fehlermeldungen.

Hallo Fragewurm,

Also ich habe den Code jetzt umgeschrieben, wie ihr es mit
empfohlen habt, aber es funktioniert immer noch nicht. Es
kommen die selben Fehlermeldungen.

Vieleicht solltest du mal etwas mehr von deinem Listing posten !!

Wenn du mir deinen Tankdeckel vorbeibringst, kann ich daran NICHT erkennen wieviel Benzin noch im Tank ist, zumal meine Glaskugel immer noch nicht funktioniert (BöseBrifeAnLieferantenSchreib) !!

MfG Peter(TOO)

Auch auf die Gefahr hin, mich jetzt als n00b zu outen, aber was ist ein Listing?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Fragewurm,

Auch auf die Gefahr hin, mich jetzt als n00b zu outen, aber
was ist ein Listing?

Den Source-Code deines Programms.
Also die Textdatei welche du erstellt hast, in der diese von dir gepostetetn Zeilen stehen, das was du hier gepostet hast ist nicht die ganze Liste (Listing) der Codeanweisungen.

MfG Peter(TOO)

Ähhhmmm … Das ist (bis jetzt) der ganze Code des Programmes. Das ist wirklich der Anfang des Programmes.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Fragewurm,

Ähhhmmm … Das ist (bis jetzt) der ganze Code des Programmes.
Das ist wirklich der Anfang des Programmes.

Wieso habe ich dann Fehler in der Zeile 15, wenn die Datei nur 5 Zeilen lang ist ???

Allerdings ist das dann auch gar kein Programm.
Programmieren lernt man nicht durch träumen, sondern durch lernen und einiges an Arbeit.

Also besorge dir mal ein C-Buch oder such im Internet nach einem C-Kurs (es sind da einige vorhanden). Die Dokumentattion zu deinem Compiler sollte auch noch Informationen liefern wie ein Programm überhaupt auszusehen hat und dann giebt es bei deinem Compiler noch eine Menge Beispiel-Programme und im Internet findest du Gigabytes an Programm-Code.

MfG Peter(TOO)