![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
передача массивов в функцию в виде параметров
jose © (2006-11-12 20:36:00)У меня есть 2 модуля. Form1 и Form2.
Если в модуле Form1 описать массив a: array of integer, а в модуле Form2 описать процедуру Func(b:array of integer), то следующий вызов:
Form2.Func(a) - срабатывает, никаких ошибок нет.
А теперь я хочу передать в другой модуль массив записей - и тут начинаются непонятные проблемы..
Делаю в модуле Form1:
type
rec=record
id:integer
end;
...
var
a:array of rec;
а в модуле Form2 пишу:
type
rec=record
id:integer;
end;
...
procedure func(b: array of rec);
Так вот, когда делаю вызов из модуля Form1:
Form2.func(a);
То он начинает ругаться на несовместимость типов ([Error] Unit1.pas(33): Incompatible types: 'Array' and 'dynamic array'). В чем причина и как быть?
Palladin (2006-11-12 20:45:00) [21]хм... в обоих модулях... правильный шаг, направленье не то... так типы одинаково заданные, но объявленные в разных модулях считаются разными типами, ты уж или в одном или в другом... определяйся...
KilkennyCat (2006-11-12 20:44:00) [22]вынести все вообще в отдельный модуль, все функции работы с ним туда же, работать только с результатами. масляное масло иначе.
sniknik (2006-11-12 20:44:00) [23]> procedure func(b: array of rec);
это не совсем массив определен, это открытый список параметров (открытый массив) для передачи переменного числа параметров
сделай
type
rec=record
id:integer
end;
Ta = array of rec;
...
var
a: Ta;
и в процедуре определяй также через Ta.
procedure func(b: Ta);
jose (2006-11-12 20:42:00) [24]Palladin, я не понимаю, почему они несовместимые и как их сделать совместимыми....
Palladin (2006-11-12 20:41:00) [25]так написали же в чем причина... или с переводом проблеммы?
jose (2006-11-12 20:40:00) [26]Если в обоих модулях описать такой тип:
atype=array of rec
то ошибка получается просто: [Error] Unit1.pas(34): Incompatible types, хотя типы на вид совершенно идентичны.
В общем, вопрос - как передать массив из одного модуля в другой? Хотелось бы обойтись без глобальных переменных (т.е. передавать в функцию-метод)