Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2016, 15:49   #1
Дmmm
Пользователь
 
Регистрация: 26.02.2013
Сообщений: 66
По умолчанию несовместимый массив

Код:
procedure FillArray(var aA: array of Double);
var l: integer;
begin
  l:=...;
  SetLength(aA, l);
  ...
end;
и на строке с SetLength компилятор выдаёт ошибку Incompatible Types.
кто тут с кем Incompatible, объясните, пожалуйста?
Дmmm вне форума Ответить с цитированием
Старый 12.09.2016, 16:04   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в pascal есть понятие Открытый массив (Open Array) - это при описании массива в качестве параметра (как в вашем случае)

а есть понятие Dynamic Array
это когда
var AA : array of Double
или
type TDynArra = array of Double;

для динамических массивов допустимо задание размера через SetLength
а для открытых - нет.

вот Вам и Incompatible

просто опишите нужный тип и передайте массив этого типа:
Код:
type TDynDoubleArray = array of Double;

procedure FillArray(var aA: TDynDoubleArray);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.09.2016, 16:06   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Да , так нельзя.
Сделайте например так:
Код:
type arDouble = array of Double;
procedure FillArray(var aA:arDouble);
// и т.д.
PS Упс, опередили..
type_Oleg вне форума Ответить с цитированием
Старый 12.09.2016, 16:14   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

FullArry(aa: array of Douuble) это передача ОТКРЫТОГО массива (open array)
который НЕ МОЖЕТ БЫТЬ изменен
Цитата:
Open array constructors can be passed only as value or const parameters. The expressions in a constructor must be assignment-compatible with the base type of the array parameter. In the case of a variant open array parameter, the expressions can be of different types.
для "изменяемого" массива надо использовать динамический
для этого надо определить СВОЙ тип
Код:
type 
MyArr: array of Double;

procedure FillArray(var aA: MyArr);
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан одномерный массив, сформировать новый массив по заданному правилу {Delphi} Nickolai47 Помощь студентам 5 16.12.2012 14:51
С# задан массив 5х5. сформировать массивы А и В. в массив А поместить элементы с четными индексами, в массив В с нечетны Koksa Помощь студентам 0 10.10.2011 11:26
Из массив А получить массив В, удвоив все нечётные элементы удвоены ( на Pascal) KARTER Помощь студентам 1 18.06.2011 19:58
Массив - Нужно написать массив и распечатать на экран с конца в начало(язык С++) econ Помощь студентам 1 29.05.2011 22:02