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'). В чем причина и как быть?


inkvizitor   (2006-11-13 09:03:00) [1]

Плохиш ты советы дельные давай, а не унижай начинающих. Не красиво как то получается. Там же написано(наверху) профи будьте снисходительны к новичкам:-))


Ketmar   (2006-11-12 22:01:00) [2]

>[22] Anatoly Podgoretsky(c) 12-Nov-2006, 21:43
>Не переживат он этого.
что-то замолчал Плохиш... неужели наелся варенья с горя и спать лёг в слезах???


Palladin   (2006-11-12 21:51:00) [3]


> [23] Anatoly Podgoretsky ©

нет ну могут найтись идеологические противники... мне по крайней мере встречались... это что то вроде фимисток... "Все типы должны быть равноправными!", "Даешь корень из "сто сорок четыре"!"


Anatoly Podgoretsky   (2006-11-12 21:43:00) [4]

> Ketmar  (12.11.2006 21:29:20)  [20]

А что есть не согласные, ну так Вирту это пофигу.


Anatoly Podgoretsky   (2006-11-12 21:43:00) [5]

> Ketmar  (12.11.2006 21:19:18)  [18]

> Плохиш, от жизни отстал.

Не переживат он этого.


Anatoly Podgoretsky   (2006-11-12 21:42:00) [6]

> jose  (12.11.2006 21:03:16)  [16]

> мне может срочно надо написать что-то

Ой, а зачем срочно?
Быстро только кошки родятся.


Ketmar   (2006-11-12 21:29:00) [7]

>[19] Palladin(c) 12-Nov-2006, 21:27
>ааааа... :) ну, я считаю что, пр. Вирт был абсолютно прав.
так и я с ним согласен. %-)


Palladin   (2006-11-12 21:27:00) [8]


> [18] Ketmar ©

ааааа... :) ну, я считаю что, пр. Вирт был абсолютно прав.


Ketmar   (2006-11-12 21:19:00) [9]

>[9] Palladin(c) 12-Nov-2006, 20:55
>а два одноименных типа в интерфейсе так это... эээ... на
>этом у меня мысли заканчиваются.
так кто сказал "одноимённые"? я сказал "одинаковые" (визуально, окромя имён). %-)

>[16] jose 12-Nov-2006, 21:03
>Плохиш, это банально - в F1 и описание языка посылать
да-да-да. читать -- это по теперешним временам немодно! совсем ты, Плохиш, от жизни отстал.


jose   (2006-11-12 21:03:00) [10]

Palladin, ок :)


jose   (2006-11-12 21:03:00) [11]

Плохиш, это банально - в F1 и описание языка посылать (мне может срочно надо написать что-то). Я спросил глупый вопрос (сам сейчас понял, что он глупый) - но добрые люди помогли. Им за это воздастся :)


Palladin   (2006-11-12 21:03:00) [12]

представь себе да, читай литературу по поводу SetLength...


jose   (2006-11-12 21:01:00) [13]

Сделал, вроде работает (всем спасибо).

Кстати, если использовать динамический массив (т.е. без указания размера), то как к нему потом обращаться? Попробовал сделать inc(s[1].id) в своей функции, так он с access violation вылетел. А если описать тип s как array [1..2] of rec - тогда всё ок.

Надо во время работы как-то размер задавать?


Плохиш   (2006-11-12 21:01:00) [14]

Интересно, когда дети начнут читать хотя бы описания языка, на котором пытаются что-то своять?


Palladin   (2006-11-12 20:58:00) [15]


> наверное надо тип в одном модуле описать


> разве что глобальный тип)


самле правильное... хотя конечно по обстановке...


jose   (2006-11-12 20:57:00) [16]

sniknik, прошу прощения, наверное не так Вас понял. Вы скорее всего дело посоветовали (т.е. только в одном модуле описывать тип)


jose   (2006-11-12 20:56:00) [17]

sniknik,
>сделай

>type
>rec=record
> id:integer
>end;

>Ta = array of rec;
>...
>var
> a: Ta;

>и в процедуре определяй также через Ta.
>procedure func(b: Ta);

так и делал - дельфи считает, что это различные типы (вернее - несовместимые).

KilkennyCat,
ну у меня в одном модуле получается результат (массив значений), а в другом хочу по нему график сделать.

Palladin,
ок, наверное надо тип в одном модуле описать, а переменные принадлежащие этому типу - в разных. Таким образом и без глобальных переменных обойдусь (разве что глобальный тип)). Сейчас попробую.


Palladin   (2006-11-12 20:55:00) [18]

эээ... как это в одном, в смысле в случае локальных типов? ) так оно сам бог велел :) области видимости то разные... а два одноименных типа в интерфейсе так это... эээ... на этом у меня мысли заканчиваются.


Ketmar   (2006-11-12 20:51:00) [19]

>[6] Palladin(c) 12-Nov-2006, 20:45
>.. так типы одинаково заданные, но объявленные в разных
>модулях считаются разными типами
да даже в одном -- всё равно разными будут. потому что Вирт так решил. %-)


Kolan   (2006-11-12 20:46:00) [20]

> Делаю в модуле Form1:
> type
> rec=record
>  id:integer
> end;


> а в модуле Form2 пишу:
> type
> rec=record
>  id:integer;
> end;


А зачем в обоих модулях писать? Хоть это и одинаковые типы(для тебя) компилятор их отличает...

ЗЫ
 Или я вопрос не понял..


Страницы:   1 2

Наверх

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