Ожидается постоянное выражение Delphi

Я получаю сообщение об ошибке «Ожидается константное выражение» со следующим кодом:

TBoard определяется как:

  TBoard = class
    field: array[1..5,1..5] of Integer;

    function check(const x, y: Integer): Integer;
    function addShip(x, y, size, dir: Integer): Integer;
    function attack(const x, y: Integer): Integer;
  end;

Я получаю ошибку в отмеченной строке:

function TBoard.attack(const x, y: Integer): Integer;
begin
  Result := Self.check(x, y);
  case Result of
  0:
    Self.field[x, y] := 1;
    Exit; // error: constant expression expected
  else Exit;
  end;
end;

Кто-нибудь знает, что происходит?
Заранее спасибо!


person Ricardo Boss    schedule 20.02.2016    source источник
comment
вам не хватает начала и конца после 0:   -  person Sebastian Proske    schedule 20.02.2016
comment
О... я тупой... Спасибо, Себастьян Проске!   -  person Ricardo Boss    schedule 20.02.2016
comment
Здесь, в SO, мы выражаем благодарность за правильный ответ, ставя галочку рядом с ответом. Он охватывает ваше ощущение того, что вы, хм... глупы (которым вы, возможно, и не являетесь) и спасибо...   -  person Tom Brunberg    schedule 20.02.2016
comment
И еще один очень хороший пример того, почему всегда следует использовать begin .. end или {}, даже если это не обязательно. Они всегда вызывают ошибки. Просто спросите Дугласа Крокфорда   -  person Toby Allen    schedule 21.02.2016


Ответы (1)


Вам просто не хватает начала и конца внутри оператора case, поэтому измените свою функцию на

function TBoard.attack(const x, y: Integer): Integer;
begin
  Result := Self.check(x, y);
  case Result of
  0:
    begin
      Self.field[x, y] := 1;
      Exit; 
    end
  else Exit;
  end;
end;

Однако, если это ваш полный код, вы можете его очень упростить, вам не нужны все эти выходы, а также не case-statement:

function TBoard.attack(const x, y: Integer): Integer;
begin
  Result := Self.check(x, y);
  if Result = 0 then
    Self.field[x, y] := 1;
end;
person Sebastian Proske    schedule 20.02.2016