W1018 Case-Label außerhalb des Bereichs des Case-Ausdrucks (Delphi)
Nach oben zu Fehler- und Warnungsmeldungen (Delphi)
Sie haben innerhalb einer case-Anweisung ein Label angegeben, das von der Steuervariable der case-Anweisung nicht erzeugt werden kann.
program Produce;
(*$WARNINGS ON*)
type
CompassPoints = (n, e, s, w, ne, se, sw, nw);
FourPoints = n..w;
var
TatesCompass : FourPoints;
begin
TatesCompass := e;
case TatesCompass OF
n: Writeln('North');
e: Writeln('East');
s: Writeln('West');
w: Writeln('South');
ne: Writeln('Northeast');
se: Writeln('Southeast');
sw: Writeln('Southwest');
nw: Writeln('Northwest');
end;
end.
Ein TatesCompass kann nicht alle Werte der CompassPoints aufnehmen, und daher werden mehrere der Case-Labels Fehler auslösen.
program Solve;
(*$WARNINGS ON*)
type
CompassPoints = (n, e, s, w, ne, se, sw, nw);
FourPoints = n..w;
var
TatesCompass : CompassPoints;
begin
TatesCompass := e;
case TatesCompass OF
n: Writeln('North');
e: Writeln('East');
s: Writeln('West');
w: Writeln('South');
ne: Writeln('Northeast');
se: Writeln('Southeast');
sw: Writeln('Southwest');
nw: Writeln('Northwest');
end;
end.
Zur Behebung des Problems gibt es zwei Möglichkeiten: Zum einen kann die Steuervariable der Case-Anweisung geändert werden, damit sie alle Case-Labels erzeugen kann. Die zweite Möglichkeit wäre, alle Case-Labels zu entfernen, die die Steuervariable nicht erzeugen kann. In diesem Beispiel wird die erste Möglichkeit gezeigt.