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‘
, 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)