Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.11.2012, 00:17
KillDead KillDead вне форума
Прохожий
 
Регистрация: 16.11.2012
Сообщения: 3
Репутация: 10
По умолчанию теряется массив в массиве объектов

Здравствуйте, не так хорошо знаю делфи, возможно туплю, возможно нужно чтото знать:

есть код
Код:
 pItem  = class
     name : string;
     layer: string;

  end;
  lItem = class
     name : string;
     protocols : array of pItem;
  end;

  public
     addLItem : array of  lItem;
     addPItem : array of  pItem;

procedure addP(name:string);
...
 SetLength(addLItem, Length(addLItem)+1 );
 item := lItem.Create();
 SetLength(item.protocols, 0);
 addLItem[Length(addLItem)-1] := item;
 for i:= 0 to Length(addLItem)-1 do begin
    ShowMessage( '1='+IntToStr(Length(  addLItem[i].protocols)));
 end;


procedure draw( );
   for i:= 0 to Length(addLItem)-1 do begin
    ShowMessage( '2=' + IntToStr(Length(  addLItem[i].protocols)));
 end;

Всё вызываю так
Код:
 
 lp.addP('P');
 lp.draw;
В итоге получаю 2 сообщения о размере подмассива -
1=0
2=106

Почему во второй функции подмассив стал таким, ссылка потерялась?
Ответить с цитированием
  #2  
Старый 17.11.2012, 00:23
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

У меня такой вопрос. Чему это принадлежит?
Код:
  public
    addLItem : array of  lItem;
    addPItem : array of  pItem;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 17.11.2012, 00:46
KillDead KillDead вне форума
Прохожий
 
Регистрация: 16.11.2012
Сообщения: 3
Репутация: 10
По умолчанию

одному классу
Tplayers = class(TObject)..
public
addLItem : array of lItem;
addPItem : array of pItem;

+------
нашёл в чём ошибка, только я не понимаю из-за чего она, выге у меня есть код

Код:
procedure addP(name:string);
  
 SetLength(alllItem, 3);

  item := lItem.Create();
  item.level := 1;
  item.name := 'pysical layer';
  allLItem[0] := item;

  item := lItem.Create();
  item.level := 2;
  item.name := 'system layer';
  allLItem[1] := item;

  item := lItem.Create();
  item.level := 2;
  item.name := 'pred system layer';
  allLItem[2] := item;

  SetLength(allPItem, 10);
  itemP := pItem.Create();
  itemP.layer :='system layer';
  itemP.name := 'P protocol';


 SetLength(addLItem, Length(addLItem)+1 );
 item := lItem.Create();
 SetLength(item.protocols, 0);
 addLItem[Length(addLItem)-1] := item;

Если меняю длину у массивов что выше - всё нормально работает. Почему? item нельзя повторно использовать?

Последний раз редактировалось KillDead, 17.11.2012 в 01:18.
Ответить с цитированием
  #4  
Старый 17.11.2012, 01:17
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

А это что находится "внутри" этого класса (Tplayers)?
Код:
  pItem  = class
    name : string;
    layer: string;
  end;
  lItem = class
    name : string;
    protocols : array of pItem;
  end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:25.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025