TList
От: Black angel  
Дата: 24.10.02 08:00
Оценка:
Забиваются данные в TList, затем он вставляется в другой такой же (и так пока не кончатся данные, другими словами, строится дерево TList-ов), все входит ничего не выходит, как быть ?
Re: TList
От: Slaveniya Беларусь  
Дата: 24.10.02 08:25
Оценка:
Здравствуйте Black angel, Вы писали:

BA>Забиваются данные в TList, затем он вставляется в другой такой же (и так пока не кончатся данные, другими словами, строится дерево TList-ов), все входит ничего не выходит, как быть ?


А в чем собственно проблемма?
All the best.
------------------------
Slaveniya (vvh@narod.ru)
Re[2]: TList
От: Black angel  
Дата: 24.10.02 09:45
Оценка:
Здравствуйте Slaveniya, Вы писали:

S>Здравствуйте Black angel, Вы писали:


BA>>Забиваются данные в TList, затем он вставляется в другой такой же (и так пока не кончатся данные, другими словами, строится дерево TList-ов), все входит ничего не выходит, как быть ?


S>А в чем собственно проблемма?


Да собственно проблема уже в том чтобы в динамически созданный лист (вернее указатель на лист), засунуть другой...
Тобишь типа:

...
var
List1, List2: ^TList;
begin
New(List1);
New(List2);
List1.Add(List2);
...

Ругается гад...
Re[3]: TList
От: Slaveniya Беларусь  
Дата: 24.10.02 10:36
Оценка:
Здравствуйте Black angel, Вы писали:

BA>Здравствуйте Slaveniya, Вы писали:


S>>Здравствуйте Black angel, Вы писали:


BA>>>Забиваются данные в TList, затем он вставляется в другой такой же (и так пока не кончатся данные, другими словами, строится дерево TList-ов), все входит ничего не выходит, как быть ?


S>>А в чем собственно проблемма?


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

BA>Тобишь типа:

BA>...

BA>var
BA> List1, List2: ^TList;
BA>begin
BA> New(List1);
BA> New(List2);
BA> List1.Add(List2);
BA>...

BA>Ругается гад...


... и праввильно делает: ты не создал экземпляр класса TList и пытаешься вызвать его метод.
Делай так:

var
vList1, vList2: TList;
...
vList1 := TList.Create;
vList2 := TList.Create;
vList1.Add(vList2);
All the best.
------------------------
Slaveniya (vvh@narod.ru)
Re[4]: TList
От: Black angel  
Дата: 24.10.02 10:42
Оценка:
Здравствуйте Slaveniya, Вы писали:

S>Здравствуйте Black angel, Вы писали:


BA>>Здравствуйте Slaveniya, Вы писали:


S>>>Здравствуйте Black angel, Вы писали:


BA>>>>Забиваются данные в TList, затем он вставляется в другой такой же (и так пока не кончатся данные, другими словами, строится дерево TList-ов), все входит ничего не выходит, как быть ?


S>>>А в чем собственно проблемма?


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

BA>>Тобишь типа:

BA>>...

BA>>var
BA>> List1, List2: ^TList;
BA>>begin
BA>> New(List1);
BA>> New(List2);
BA>> List1.Add(List2);
BA>>...

BA>>Ругается гад...


S>... и праввильно делает: ты не создал экземпляр класса TList и пытаешься вызвать его метод.

S>Делай так:

S>var

S> vList1, vList2: TList;
S>...
S>vList1 := TList.Create;
S>vList2 := TList.Create;
S>vList1.Add(vList2);

А как в таком случае быть с рекурсией ? Ведь лист заполняется рекурсивной функцией... После ее завершения все экземпляры удаляются из памяти, а определить их вне рекурсии невозможно, количество создаваемых объектов произвольно...
Re[5]: TList
От: Slaveniya Беларусь  
Дата: 24.10.02 10:51
Оценка:
Здравствуйте Black angel, Вы писали:


BA>А как в таком случае быть с рекурсией ? Ведь лист заполняется рекурсивной функцией... После ее завершения все экземпляры удаляются из памяти, а определить их вне рекурсии невозможно, количество создаваемых объектов произвольно...


Ошибаешься: все екземпляры класса TList, которые ты создаешь с помощью TList.Create, будут висеть в памяти до тех пор, пока ты их не освободишь с помощью vList1.Free, а vList1, vList2 — это переменные, содержащие указатель на конкретный экземпляр класса, посредством которых ты можешь вызывать методы конкретного класса, обращаться к свойствам и т.д.
All the best.
------------------------
Slaveniya (vvh@narod.ru)
Re[6]: TList
От: Black angel  
Дата: 25.10.02 06:24
Оценка:
Здравствуйте Slaveniya, Вы писали:

S>Здравствуйте Black angel, Вы писали:


S>

BA>>А как в таком случае быть с рекурсией ? Ведь лист заполняется рекурсивной функцией... После ее завершения все экземпляры удаляются из памяти, а определить их вне рекурсии невозможно, количество создаваемых объектов произвольно...

S>Ошибаешься: все екземпляры класса TList, которые ты создаешь с помощью TList.Create, будут висеть в памяти до тех пор, пока ты их не освободишь с помощью vList1.Free, а vList1, vList2 — это переменные, содержащие указатель на конкретный экземпляр класса, посредством которых ты можешь вызывать методы конкретного класса, обращаться к свойствам и т.д.


Ok, благодарю !
Re[6]: TList
От: Black angel  
Дата: 25.10.02 11:02
Оценка:
Здравствуйте Slaveniya, Вы писали:

S>Здравствуйте Black angel, Вы писали:


S>

BA>>А как в таком случае быть с рекурсией ? Ведь лист заполняется рекурсивной функцией... После ее завершения все экземпляры удаляются из памяти, а определить их вне рекурсии невозможно, количество создаваемых объектов произвольно...

S>Ошибаешься: все екземпляры класса TList, которые ты создаешь с помощью TList.Create, будут висеть в памяти до тех пор, пока ты их не освободишь с помощью vList1.Free, а vList1, vList2 — это переменные, содержащие указатель на конкретный экземпляр класса, посредством которых ты можешь вызывать методы конкретного класса, обращаться к свойствам и т.д.


Это то ясно... Но вот как быть в таком случае :

procedure ZZZ(X : TList);
var
Y:TList;
begin

if not SomeInternalVariable then
begin
Y:=TList.Create;
ZZZ(Y);
X.Add(@Y);
end;
end;

Понятно, что каждый раз создавая Y, он переинициализируется в памяти... но какой возможен выход ? В Си с этим нет проблем, но прогу нужно сделать именно в Дельфях...
Re[7]: TList
От: Slaveniya Беларусь  
Дата: 25.10.02 12:53
Оценка:
Здравствуйте Black angel, Вы писали:

BA>Здравствуйте Slaveniya, Вы писали:


S>>Здравствуйте Black angel, Вы писали:


S>>

BA>>>А как в таком случае быть с рекурсией ? Ведь лист заполняется рекурсивной функцией... После ее завершения все экземпляры удаляются из памяти, а определить их вне рекурсии невозможно, количество создаваемых объектов произвольно...

S>>Ошибаешься: все екземпляры класса TList, которые ты создаешь с помощью TList.Create, будут висеть в памяти до тех пор, пока ты их не освободишь с помощью vList1.Free, а vList1, vList2 — это переменные, содержащие указатель на конкретный экземпляр класса, посредством которых ты можешь вызывать методы конкретного класса, обращаться к свойствам и т.д.


BA>Это то ясно... Но вот как быть в таком случае :


BA>procedure ZZZ(X : TList);

BA>var
BA> Y:TList;
BA>begin
BA>
BA> if not SomeInternalVariable then
BA> begin
BA> Y:=TList.Create;
BA> ZZZ(Y);
BA> X.Add(@Y);
BA> end;
BA>end;

BA>Понятно, что каждый раз создавая Y, он переинициализируется в памяти... но какой возможен выход ? В Си с этим нет проблем, но прогу нужно сделать именно в Дельфях...


НИКАК НЕ БЫТЬ!!! А почему с этим будут проблеммы в Дельфях??? Кто тебе это сказал???

Совет: RTFM!!!
All the best.
------------------------
Slaveniya (vvh@narod.ru)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.