Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

array [0..0] of ... [D7]


Страницы:   1 2

Прима ©   (2009-09-18 12:49:00) 


type

 TElem = packed record
   S1:Byte;
   S2:Byte;
   D1:DWord;
 end;

 TMArr = array [0..0] of TElem;

 TFuck = record
   B:Byte;
   Q:TMArr;
 end;

procedure TForm1.Button1Click(Sender: TObject);
 var Q:TFuck;
 I:Integer;
begin
 Q.B:=1;
 Q.Q[0].S1:=1;
 Q.Q[0].S2:=1;
 Q.Q[0].D1:=1;
 Q.Q[1].S1:=2; <=Constant expression violates subrange bounds
 Q.Q[1].S2:=2;
 Q.Q[1].D1:=2;
 //
 for I:=0 to Length(Q.Q)-1 do
 begin
   Memo1.Lines.Add(Format('%d %d',[Q.Q[I].S1, Q.Q[I].S2]));
 end;
end;


В чем я не прав ? Необходимо заранее указывать размер массива?
Тогда как ?

Спасибо !


Anatoly Podgoretsky   (2009-09-18 13:30:00) [21]

Можно

>  TMArr = array [1..11] of TElem;

Вот тут выделена память по 11 элементов типа TElem


Прима   (2009-09-18 13:26:00) [22]

2 Anatoly Podgoretsky ©   (18.09.09 13:24) [5]
> Для статических массивов память тоже выделяется статически,
>  через указание размерности в типа.


Пардон, но я не понял. Можно ли кодом ?


Anatoly Podgoretsky   (2009-09-18 13:24:00) [23]


> Прима   (18.09.09 13:18) [4]

Для статических массивов память тоже выделяется статически, через указание размерности в типа.


Прима   (2009-09-18 13:18:00) [24]

2 Юрий Зотов ©   (18.09.09 13:01) [3]

Спасибо

.
>  либо указатель на статический массив (сначала выделив под
> него память, конечно).


Хочу разобраться для себя. Можно подробнее и кодом ?
GetMem(Q.Q,SizeOf(TElem)*2);
Ибо даже выделить память пока не получается


Юрий Зотов   (2009-09-18 13:01:00) [25]

> Прима   (18.09.09 12:49)  

>  Необходимо заранее указывать размер массива?

Размер статического массива указывается при его объявлении и не может быть изменен. Вы объявили статисеский массив, который содержит один элемент с индексом 0, поэтому Q.Q[1] дает ошибку.

> Тогда как ?

Используйте либо динамический массив (см. в справке Dynamic arrays), либо указатель на статический массив (сначала выделив под него память, конечно). Первый способ, похоже, будет проще.


Прима   (2009-09-18 12:56:00) [26]

Пардон. Разобрался.
Вот решение : TMArr = array of TElem;


Прима   (2009-09-18 12:54:00) [27]


 Q.B:=1;
 SetLength(Q.Q,2); <=Incompatible types
 Q.Q[0].S1:=1;


Страницы:   1 2

Наверх

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