Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Внизпередача массивов в функцию в виде параметров Найти похожие ветки
← →
jose (2006-11-12 20:36) [0]У меня есть 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"). В чем причина и как быть?
← →
jose (2006-11-12 20:40) [1]Если в обоих модулях описать такой тип:
atype=array of rec
то ошибка получается просто: [Error] Unit1.pas(34): Incompatible types, хотя типы на вид совершенно идентичны.
В общем, вопрос - как передать массив из одного модуля в другой? Хотелось бы обойтись без глобальных переменных (т.е. передавать в функцию-метод)
← →
Palladin © (2006-11-12 20:41) [2]так написали же в чем причина... или с переводом проблеммы?
← →
jose (2006-11-12 20:42) [3]Palladin, я не понимаю, почему они несовместимые и как их сделать совместимыми....
← →
sniknik © (2006-11-12 20:44) [4]> procedure func(b: array of rec);
это не совсем массив определен, это открытый список параметров (открытый массив) для передачи переменного числа параметров
сделай
type
rec=record
id:integer
end;
Ta = array of rec;
...
var
a: Ta;
и в процедуре определяй также через Ta.
procedure func(b: Ta);
← →
KilkennyCat © (2006-11-12 20:44) [5]вынести все вообще в отдельный модуль, все функции работы с ним туда же, работать только с результатами. масляное масло иначе.
← →
Palladin © (2006-11-12 20:45) [6]хм... в обоих модулях... правильный шаг, направленье не то... так типы одинаково заданные, но объявленные в разных модулях считаются разными типами, ты уж или в одном или в другом... определяйся...
← →
Kolan © (2006-11-12 20:46) [7]> Делаю в модуле Form1:
> type
> rec=record
> id:integer
> end;
> а в модуле Form2 пишу:
> type
> rec=record
> id:integer;
> end;
А зачем в обоих модулях писать? Хоть это и одинаковые типы(для тебя) компилятор их отличает...
ЗЫ
Или я вопрос не понял..
← →
Ketmar © (2006-11-12 20:51) [8]>[6] Palladin(c) 12-Nov-2006, 20:45
>.. так типы одинаково заданные, но объявленные в разных
>модулях считаются разными типами
да даже в одном -- всё равно разными будут. потому что Вирт так решил. %-)
← →
Palladin © (2006-11-12 20:55) [9]эээ... как это в одном, в смысле в случае локальных типов? ) так оно сам бог велел :) области видимости то разные... а два одноименных типа в интерфейсе так это... эээ... на этом у меня мысли заканчиваются.
← →
jose (2006-11-12 20:56) [10]sniknik,
>сделай
>type
>rec=record
> id:integer
>end;
>Ta = array of rec;
>...
>var
> a: Ta;
>и в процедуре определяй также через Ta.
>procedure func(b: Ta);
так и делал - дельфи считает, что это различные типы (вернее - несовместимые).
KilkennyCat,
ну у меня в одном модуле получается результат (массив значений), а в другом хочу по нему график сделать.
Palladin,
ок, наверное надо тип в одном модуле описать, а переменные принадлежащие этому типу - в разных. Таким образом и без глобальных переменных обойдусь (разве что глобальный тип)). Сейчас попробую.
← →
jose (2006-11-12 20:57) [11]sniknik, прошу прощения, наверное не так Вас понял. Вы скорее всего дело посоветовали (т.е. только в одном модуле описывать тип)
← →
Palladin © (2006-11-12 20:58) [12]
> наверное надо тип в одном модуле описать
> разве что глобальный тип)
самле правильное... хотя конечно по обстановке...
← →
Плохиш © (2006-11-12 21:01) [13]Интересно, когда дети начнут читать хотя бы описания языка, на котором пытаются что-то своять?
← →
jose (2006-11-12 21:01) [14]Сделал, вроде работает (всем спасибо).
Кстати, если использовать динамический массив (т.е. без указания размера), то как к нему потом обращаться? Попробовал сделать inc(s[1].id) в своей функции, так он с access violation вылетел. А если описать тип s как array [1..2] of rec - тогда всё ок.
Надо во время работы как-то размер задавать?
← →
Palladin © (2006-11-12 21:03) [15]представь себе да, читай литературу по поводу SetLength...
← →
jose (2006-11-12 21:03) [16]Плохиш, это банально - в F1 и описание языка посылать (мне может срочно надо написать что-то). Я спросил глупый вопрос (сам сейчас понял, что он глупый) - но добрые люди помогли. Им за это воздастся :)
← →
jose (2006-11-12 21:03) [17]Palladin, ок :)
← →
Ketmar © (2006-11-12 21:19) [18]>[9] Palladin(c) 12-Nov-2006, 20:55
>а два одноименных типа в интерфейсе так это... эээ... на
>этом у меня мысли заканчиваются.
так кто сказал "одноимённые"? я сказал "одинаковые" (визуально, окромя имён). %-)
>[16] jose 12-Nov-2006, 21:03
>Плохиш, это банально - в F1 и описание языка посылать
да-да-да. читать -- это по теперешним временам немодно! совсем ты, Плохиш, от жизни отстал.
← →
Palladin © (2006-11-12 21:27) [19]
> [18] Ketmar ©
ааааа... :) ну, я считаю что, пр. Вирт был абсолютно прав.
← →
Ketmar © (2006-11-12 21:29) [20]>[19] Palladin(c) 12-Nov-2006, 21:27
>ааааа... :) ну, я считаю что, пр. Вирт был абсолютно прав.
так и я с ним согласен. %-)
← →
Anatoly Podgoretsky © (2006-11-12 21:42) [21]> jose (12.11.2006 21:03:16) [16]
> мне может срочно надо написать что-то
Ой, а зачем срочно?
Быстро только кошки родятся.
← →
Anatoly Podgoretsky © (2006-11-12 21:43) [22]> Ketmar (12.11.2006 21:19:18) [18]
> Плохиш, от жизни отстал.
Не переживат он этого.
← →
Anatoly Podgoretsky © (2006-11-12 21:43) [23]> Ketmar (12.11.2006 21:29:20) [20]
А что есть не согласные, ну так Вирту это пофигу.
← →
Palladin © (2006-11-12 21:51) [24]
> [23] Anatoly Podgoretsky ©
нет ну могут найтись идеологические противники... мне по крайней мере встречались... это что то вроде фимисток... "Все типы должны быть равноправными!", "Даешь корень из "сто сорок четыре"!"
← →
Ketmar © (2006-11-12 22:01) [25]>[22] Anatoly Podgoretsky(c) 12-Nov-2006, 21:43
>Не переживат он этого.
что-то замолчал Плохиш... неужели наелся варенья с горя и спать лёг в слезах???
← →
inkvizitor © (2006-11-13 09:03) [26]Плохиш ты советы дельные давай, а не унижай начинающих. Не красиво как то получается. Там же написано(наверху) профи будьте снисходительны к новичкам:-))
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.043 c