![]() |
| ||
|
|
Новости |
Поиск |
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'). В чем причина и как быть?
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;
А зачем в обоих модулях писать? Хоть это и одинаковые типы(для тебя) компилятор их отличает...
ЗЫ
Или я вопрос не понял..