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.