Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

передача массивов в функцию в виде параметров


Страницы:   1 2

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, хотя типы на вид совершенно идентичны.

В общем, вопрос - как передать массив из одного модуля в другой? Хотелось бы обойтись без глобальных переменных (т.е. передавать в функцию-метод)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо