Delphi: SetLength () для аргумента типа «массив TObject» - PullRequest
6 голосов
/ 29 октября 2009

Я пытаюсь изменить размер массива определенного класса, передаваемого в качестве аргумента, например,

procedure Resize(MyArray: Array of TObject);
begin
  SetLength(MyArray, 100);
end;

Однако возникает ошибка «Несовместимые типы E2008». Правда ли, что вы не можете этого сделать (я видел слухи, но нет официальной документации) или я что-то делаю не так?

Ответы [ 2 ]

10 голосов
/ 29 октября 2009

Вы не определили тип явно. Таким образом, у компилятора есть проблемы с соответствием им. Если вы определите тип как:

type
  TObjectArray = array of TObject;

Нет никаких сомнений, и (благодаря Mghie) вы должны использовать параметр var, потому что изменение размера может вызвать изменение в указателе.

procedure Resize(var MyArray: TObjectArray);
begin
  SetLength(MyArray, 100);
end;
9 голосов
/ 29 октября 2009

Вы смешиваете открытые массивы (параметр Resize) и динамические массивы (что ожидает SetLength). См. здесь для объяснения, особенно для части под названием "Путаница".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...