W1018 case 式の範囲外のラベルがあります (Delphi)
エラーと警告のメッセージ(Delphi) への移動
case 文の制御変数が生成できないラベルを case 文の内部に指定しました。
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.
{ TatesCompass は CompassPoints の値の一部を保持できないので,いくつかの case ラベルがエラーになる }
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.
{ コードを調べて何が目的かを判別した後,2 つの解決方法がある。1 つはすべての case ラベルを生成できるように case 文の制御変数の型を変更する方法である。2 番めの方法は制御変数が生成できないすべての case ラベルを削除する方法である。このコードは最初の方法を示す例である }