Передача дин. массива как var параметра и SetLength?

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Ответить
Аватара пользователя
leo_bsv
постоялец
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола
Контактная информация:

Передача дин. массива как var параметра и SetLength?

Сообщение leo_bsv »

Есть кусок кода:

Код: Выделить всё

// Загрузка пиклиста
procedure TXForm.LoadXList(from_table:string; to_col:integer; var _arr: array of integer);
var i:integer;
begin
...
  SetLength(_arr,0);
...
  SetLength(_arr,Length(_arr)+1); // удлиняем массив на 1
...
end;   


Вопрос: почему SetLength вызывает ошибку Error: Type mismatch? Так и должно быть?
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Это передача не динамического, а открытого массива получается. Чтобы был динамический надо объявить сначала его тип, а потом использовать:

Код: Выделить всё

type
  TIntArray = array of integer;

procedure Proc(var arr : TIntArray);
.....
Аватара пользователя
leo_bsv
постоялец
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола
Контактная информация:

Сообщение leo_bsv »

Большое спасибо. :P
Ответить