Задать вопрос
@Alertoso

Как исправить ошибку E2066?

Имеется такая процедура заполнения массивов:
Procedure FillArrays (var ArrI, ArrFB: TArr; const Row: Integer; const ArrType: TSet);
Var
  i: Integer;
Begin
  if ArrType = Sorted then
    for i := 1 to Row do
      ArrI[i] := i
  else if ArrType = Reversed then
    for i := 1 to Row do
      ArrI[i] := Row - i + 1
  else
    for i := 1 to Row do
      ArrI[i] := Random(Row);

  ArrFB := ArrI;
End;

Объявления следующие:
Type
  TArr = array [1..3000] of Integer;
  TARows = array [1..6] of Integer;
  TSet = (Sorted, Reversed, Random);
  TResArr = array [1..6, 1..12] of Integer;

Const
  ARows: TARows = (100, 250, 500, 1000, 2000, 3000);
  Output: array [1..3] of String = ('   Sorted   ', '   Reversed   ', '   Random   ');

Var
  InsertSortArr, FBubbleSortArr: TArr;
  ResArr: TResArr;
  i, j, IndRes: Integer;
  SortKind: TSet;

Не понимаю, почему возникает ошибка: E2066 Missing operator or semicolon, помогите, пожалуйста, понять, в чём дело?
  • Вопрос задан
  • 164 просмотра
Подписаться 1 Простой 3 комментария
Решения вопроса 1
OCTAGRAM
@OCTAGRAM
TSet = (Sorted, Reversed, Random);

Это объявление сделало Random константой с более высоким приоритетом видимости, чем System.Random.

Варианты решения:

В новых Delphi можно написать (в начале кода)

{$SCOPEDENUMS ON}

и заменить

if ArrType = TSet.Sorted then
// …
else if ArrType = TSet.Reversed then


Тогда TSet.Random не сможет пересекаться с System.Random

Можно, наоборот, при использовании System.Random указывать полностью квалифицированный идентификатор:

ArrI[i] := System.Random(Row);

Либо можно просто переименовать TSet.Random во что-то, что не в точности Random
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы