Entwickler-Ecke

Sonstiges (Delphi) - Fehlermeldung Konstantenausdruck erforderlich


mi-frank - Di 28.02.06 23:56
Titel: Fehlermeldung Konstantenausdruck erforderlich
Hi,

habe folgenden Quellcode


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var 
 DS:Integer;

procedure Test(Mode:integer);
begin
  case Mode of
     1:
       DS:=1;
     2:
       DS:=DS-1;
     3:
       DS:=Ds+1;
     4:
       DS:=frmAzubiBeurteilungsbogen.TableBogen.recordcount;
  end;
end;


bekomme die Fehlermeldung "Konstantenausdruck erforderlich" und weiß einfach nicht, was ich falsch gemacht habe?

Ich hoffe, einer von euch kann mir weiterhelfen!

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


Narses - Mi 01.03.06 00:19

Moin!

user profile iconmi-frank hat folgendes geschrieben:
bekomme die Fehlermeldung "Konstantenausdruck erforderlich" und weiß einfach nicht, was ich falsch gemacht habe?

Wenn du jetzt noch dazu gesagt hättest, bei welcher Zeile der Fehler auftritt, könnten wir dir vielleicht sogar wirklich helfen; aber gut, dass du uns das raten läßt, sonst haben wir ja gar keinen Spaß dabei... :wink:

cu
Narses

PS: Wenn du die Delphi-Tags für deinen Code verwendest, wird dieser auch besser dargestellt und läßt sich leichter lesen.


Delete - Mi 01.03.06 00:28

Mode darf keine Variable sein, da der Compiler die Sprungadressen der Case-Anweisung beim Kompilieren errechnet. Entweder überlegst du dir was anderes oder zu löst das mit if und else.


Narses - Mi 01.03.06 00:42

Moin!

user profile iconLuckie hat folgendes geschrieben:
Mode darf keine Variable sein, da der Compiler die Sprungadressen der Case-Anweisung beim Kompilieren errechnet. Entweder überlegst du dir was anderes oder zu löst das mit if und else.

Ähm, also das glaube ich nicht; ich habe das mal gerade getestet, klar darf der case-Ausdruck eine Variable sein. Das ist IMHO was anderes, was bei ihm den Fehler wirft. :wink:

cu
Narses


Delete - Mi 01.03.06 00:51

Hm, stimmt das geht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function foobar(Mode: Integer): String;
begin
  case Mode of
  0: ;
  1: ;
  2: ;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  foobar(2);
end;

Dann habe ich das jetzt mit irgendetwas anderem Verwechselt. :gruebel:

Ich glaube, ich habe das mit den Sprungzielen verwechselt, das dürfen keine Variablen sein. ;)


JayEff - Mi 01.03.06 02:07

Genau, Luckie. Das hat mich auch schon geärgert ^^
Ich wollte die Wahrscheinlichkeit eines Zufallsevents variabel machen:

Delphi-Quelltext
1:
2:
3:
4:
case random(1000of
 1..50:tudies;
 51..52+wasweisich:tudas;
end;

Aber das klappt nicht. Hier wird genau die Fehlermeldung gebracht, die mi-frank erhalten hat.
Blöderweise sollten wir tatsächlich wissen, in welcher Zeile das kommt. ausserdem solltest du [*delphi] [/delphi] tags verwenden, um den Code den du postest etwas schöner aussehen zu lassen :/ (ohne den * natürlich)

edit: [ot] sicher dass das nicht "fubar" für "fu**ed up beyond all recognition" heist?


BenBE - Mi 01.03.06 02:34

Ich hab zwei Ideen, woran es liegen könnte:

1. Mode ist vom Compiler in irgendeine Weise vorbelegt was zu Problemen in der Handhabung führt (denk ich mal weniger)

2. Durch die Zuweisungsoperationen wird der Compiler durch die Zuweisungen irritiert. Versuch mal, ob es so hier besser funzt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
var 
    DS: Integer;

procedure Test(Mode: integer);
begin
    case Mode of
        1:
            Begin
                DS:=1;
            end;
        2:
            Begin
                Dec(DS);
            end;
        3:
            Begin
                Inc(DS);
            end;
        4:
            Begin
                DS := frmAzubiBeurteilungsbogen.TableBogen.recordcount;
            end;
    end;
end;


Ansonsten bitte wirklich noch einmal die genaue Fehlerzeile mitteilen.

Weiterhin (heut erst wieder gehabt*) ein wenig größeren Source-Abshnitt senden. Rein syntaktisch sehe ich hier keinen Fehler.

* Beim Source eines Kumpels gab's den Fehler "String nicht kompatibel mit Procedure, Untyped Pointer, ..." (markiert wurde das End einer Schleife) ... Ursache war ein +-Zeichen anstatt eines ; zehn Zeilen oberhalb ... Guck also auch mal speziell nach solchen Fehlern.


mi-frank - Mi 01.03.06 12:03

Hi,

die letzte Antwort war die richtige!

Hab mal wieder nicht an das Begin ... end; gedacht!

Nächstes mal werde ich probieren mich klarer auszudrücken, wo ich ein Problem habe!!