Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.036 c
2-1163778807
Jzero
2006-11-17 18:53
2006.12.03
Поиск папки


2-1163602048
Монгол
2006-11-15 17:47
2006.12.03
Отловить нажатие кнопок на клавиатуре


1-1161673278
DelphiLexx
2006-10-24 11:01
2006.12.03
TRegistry - удалить подраздел


2-1163766009
Grant
2006-11-17 15:20
2006.12.03
ODBC


15-1163708207
Yeg
2006-11-16 23:16
2006.12.03
PowerPoint и звуковой файл





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский