![]() |
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:
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...
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; 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 |
Re: Konstantenausdruck in case-Verzweigung erwartet
Case-Labels müssen Konstanten sein. Array-Elemente sind nicht konstant.
|
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 |
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] |
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. |
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 =) |
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; |
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 =) |
Re: Konstantenausdruck in case-Verzweigung erwartet
Mein Problem ist wie folgt:
Delphi-Quellcode:
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.
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; |
Re: Konstantenausdruck in case-Verzweigung erwartet
Rück den Code doch mal schön ein. Also z.B. so:
Delphi-Quellcode:
Das hilft bei derartigen begin-end Fehlern ungemein ;)
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; (imho fehlt bei dir ein end oder so bzw. ein ist an der falschen Stelle) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz