Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Konstantenausdruck in case-Verzweigung erwartet (https://www.delphipraxis.net/122297-konstantenausdruck-case-verzweigung-erwartet.html)

Phil.I.Am 13. Okt 2008 14:25


Konstantenausdruck in case-Verzweigung erwartet
 
Hiho... ich beschäftige mich im Moment damit einen kleines Mastermind spiel in Delphi zu schreiben. Ich bin noch nicht wirklich erfahren (2-3 kleine projekte), daher bitte die vielleicht etwas umständliche Programierung entschuldigen :wink:

mein problem ist folgendes: ich habe in meinem programm mehrer case-verzweigungen, um die farbeingabe des users mit der vom pc generierten farbabfolge zu vergleichen...

Delphi-Quellcode:
if (i = 0) then
 begin //15
  lblFarbe1_1.Caption := cmbFarbe1.Text;
  case cmbFarbe1.ItemIndex of
  geheim[1] : a := (a+1); //hier
  geheim[2] : b := (b+1); //hier
  geheim[3] : b := (b+1); //hier
  geheim[4] : b := (b+1) //hier
  else c := (c+1);
  end;
  lblFarbe1_2.Caption := cmbFarbe2.Text;
  case cmbFarbe2.ItemIndex of
  geheim[2] : a := (a+1); //hier
  geheim[1] : b := (b+1); //hier
  geheim[3] : b := (b+1); //hier
  geheim[4] : b := (b+1) //hier
  else c := (c+1);
  end;
  lblFarbe1_3.Caption := cmbFarbe3.Text;
  case cmbFarbe3.ItemIndex of
  geheim[3] : a := (a+1); //hier
  geheim[1] : b := (b+1); //hier
  geheim[2] : b := (b+1); //hier
  geheim[4] : b := (b+1) //hier
  else c := (c+1);
  end;
  lblFarbe1_4.Caption := cmbFarbe4.Text;
  case cmbFarbe4.ItemIndex of
  geheim[4] : a := (a+1); //hier
  geheim[1] : b := (b+1); //hier
  geheim[2] : b := (b+1); //hier
  geheim[3] : b := (b+1) //hier
  else c := (c+1);
  end;
  lblergebnis1.Caption := 'Runde 1: '+inttostr(a)+' komplett Richtige, '+inttostr(b)+' Richtige und '+inttostr(c)+' Falsche.';
  end;
dies ist ein teil des programms... das habe ich insgesamt 8 mal, für acht runden in denen man seine kombination noch verändern kann. die variablen a, b, c und i sind als ganz normale integer deklariert...

die fehlermeldung ist folgende: "E2026 Konstantenausdruck erwartet" (fehler werden immer bei "hier" angezeigt

habe mich schon durch mehrere foren gesucht und auch eine mögliche ursache gefunden... dort hatte der programierer in seinem code ein end falsch gesetzt oder vergessen (bin nicht ganz sicher :?: )... habe jdeoch jetzt schon 3 mal alle begins und ends geprüft und finde keinen fehler...

hätte jemand von euch eine idee? falls jemand den gesamten source-code möchte (der zu lang für einen einzigen beitrag wäre =P) bitte melden ;)

lg Phil.I.Am

DeddyH 13. Okt 2008 14:29

Re: Konstantenausdruck in case-Verzweigung erwartet
 
Case-Labels müssen Konstanten sein. Array-Elemente sind nicht konstant.

Phil.I.Am 13. Okt 2008 14:33

Re: Konstantenausdruck in case-Verzweigung erwartet
 
dank dir ;)

hätte ih auch drauf kommen können... aber naja, hättest du oder jemand anderes denn eine idee wie ich das ganze umschreiben könnte? einfach mit nder if/else schleife? (das hatte ich vorher, ist aber sehr unübersichtölih und bestimmt nicht gerade elgenat gelöst ;) )

btw: das array "geheim" beinhaltet die vom pc generierte farbenfolge

DeddyH 13. Okt 2008 14:38

Re: Konstantenausdruck in case-Verzweigung erwartet
 
"geheim" ist ein Array of TColor, oder wie soll ich das verstehen? Falls das so ist, wäre es sowieso Quatsch, die Elemente mit einem ItemIndex einer ComboBox zu vergleichen.

[edit] Die "If-Schleife" hab ich doch glatt überlesen :stupid: [/edit]

sirius 13. Okt 2008 14:38

Re: Konstantenausdruck in case-Verzweigung erwartet
 
Tötet die If-Schleife!

Da musst du wohl mit if-else-if arbeiten. Besser wird es im Compilat eh nicht.
Du könntest aber mit einer geschickten nested function noch etwas reißen.

Phil.I.Am 13. Okt 2008 14:43

Re: Konstantenausdruck in case-Verzweigung erwartet
 
geheim ist einfach nur ein array of integer wobei 0 für gelb, 1 für orange, 2 für rot usw steht... (sprich: ist geheim[1] = 2, ist die farbe auf platz 1 orange...).

könntest du das mit dieser nested function mal etwas genauer erklären (
was ist das?, wie funktioniert das? =P)

sonst halt wieder if/else...-.-

auf jeden fall schon einaml danke für die schnellen antworten =)

DeddyH 13. Okt 2008 14:45

Re: Konstantenausdruck in case-Verzweigung erwartet
 
Eine nested function ist eine "Unterprozedur".
Delphi-Quellcode:
procedure Haupt;

  procedure Hallo; //nested function
  begin
    ShowMessage('Hallo');
  end;

begin
  Hallo;
end;

Phil.I.Am 13. Okt 2008 14:48

Re: Konstantenausdruck in case-Verzweigung erwartet
 
ok werd mal ein bissl dazu googlen, aber erstmal wieder auf die (bescheidene) if/else-variante zurückgreifen...

dank euch =)

Fuchspower 17. Okt 2008 18:21

Re: Konstantenausdruck in case-Verzweigung erwartet
 
Mein Problem ist wie folgt:

Delphi-Quellcode:
procedure TForm1.BEinsClick(Sender: TObject);
begin
with imbild.Canvas do
 begin
  case pixels[45,105] of
clred: begin brush.color:=clred;
 floodfill (15, 15, clblack, fsborder); end;
clyellow: begin brush.color:=clyellow;
 floodfill (15, 15, clblack, fsborder); end;
clgreen: begin brush.color:=clgreen;
 floodfill (15, 15, clblack, fsborder); end;
clwhite: begin brush.color:=clwhite;
 floodfill (15, 15, clblack, fsborder); end;
clblue: begin brush.color:=clblue;
 floodfill (15, 15, clblack, fsborder); end;
clfuchsia: begin brush.color:=clfuchsia;
 floodfill (15, 15, clblack, fsborder); end;

  case pixels[85,105] of
clred: begin brush.color:=clred;
 floodfill (15, 35, clblack, fsborder); end;
clyellow: begin brush.color:=clyellow;
 floodfill (15, 35, clblack, fsborder); end;
clgreen: begin brush.color:=clgreen;
 floodfill (15, 35, clblack, fsborder); end;
clwhite: begin brush.color:=clwhite;
 floodfill (15, 35, clblack, fsborder); end;
clblue: begin brush.color:=clblue;
 floodfill (35, 15, clblack, fsborder); end;
clfuchsia: begin brush.color:=clfuchsia;
 floodfill (35, 15, clblack, fsborder); end;

 end;
end;
nun verlangt er beim vorletzten end einen Konstantenausdruck. Ich habe relativ wenige Erfahrungen mit Delphi und dies ist nur ein Auszug der gesamten Procedure, der Rest ist aber genauso aufgebaut.

jfheins 17. Okt 2008 18:29

Re: Konstantenausdruck in case-Verzweigung erwartet
 
Rück den Code doch mal schön ein. Also z.B. so:

Delphi-Quellcode:
with imbild.Canvas do
begin
  case pixels[45,105] of
    clred:
    begin
      brush.color:=clred;
      floodfill (15, 15, clblack, fsborder);
    end;
    clwhite:
    begin
      brush.color:=clwhite;
      floodfill (15, 15, clblack, fsborder);
    end;
  end;
end;
Das hilft bei derartigen begin-end Fehlern ungemein ;)

(imho fehlt bei dir ein end oder so bzw. ein ist an der falschen Stelle)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz