Забиваются данные в TList, затем он вставляется в другой такой же (и так пока не кончатся данные, другими словами, строится дерево TList-ов), все входит ничего не выходит, как быть ?
Здравствуйте Black angel, Вы писали:
BA>Забиваются данные в TList, затем он вставляется в другой такой же (и так пока не кончатся данные, другими словами, строится дерево TList-ов), все входит ничего не выходит, как быть ?
А в чем собственно проблемма?
All the best.
------------------------
Slaveniya (vvh@narod.ru)
Здравствуйте Slaveniya, Вы писали:
S>Здравствуйте Black angel, Вы писали:
BA>>Забиваются данные в TList, затем он вставляется в другой такой же (и так пока не кончатся данные, другими словами, строится дерево TList-ов), все входит ничего не выходит, как быть ?
S>А в чем собственно проблемма?
Да собственно проблема уже в том чтобы в динамически созданный лист (вернее указатель на лист), засунуть другой...
Тобишь типа:
...
var
List1, List2: ^TList;
begin
New(List1);
New(List2);
List1.Add(List2);
...
Здравствуйте 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 и пытаешься вызвать его метод.
Делай так:
Здравствуйте 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);
А как в таком случае быть с рекурсией ? Ведь лист заполняется рекурсивной функцией... После ее завершения все экземпляры удаляются из памяти, а определить их вне рекурсии невозможно, количество создаваемых объектов произвольно...
BA>А как в таком случае быть с рекурсией ? Ведь лист заполняется рекурсивной функцией... После ее завершения все экземпляры удаляются из памяти, а определить их вне рекурсии невозможно, количество создаваемых объектов произвольно...
Ошибаешься: все екземпляры класса TList, которые ты создаешь с помощью TList.Create, будут висеть в памяти до тех пор, пока ты их не освободишь с помощью vList1.Free, а vList1, vList2 — это переменные, содержащие указатель на конкретный экземпляр класса, посредством которых ты можешь вызывать методы конкретного класса, обращаться к свойствам и т.д.
All the best.
------------------------
Slaveniya (vvh@narod.ru)
Здравствуйте Slaveniya, Вы писали:
S>Здравствуйте Black angel, Вы писали:
S> BA>>А как в таком случае быть с рекурсией ? Ведь лист заполняется рекурсивной функцией... После ее завершения все экземпляры удаляются из памяти, а определить их вне рекурсии невозможно, количество создаваемых объектов произвольно...
S>Ошибаешься: все екземпляры класса TList, которые ты создаешь с помощью TList.Create, будут висеть в памяти до тех пор, пока ты их не освободишь с помощью vList1.Free, а vList1, vList2 — это переменные, содержащие указатель на конкретный экземпляр класса, посредством которых ты можешь вызывать методы конкретного класса, обращаться к свойствам и т.д.
Здравствуйте 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, он переинициализируется в памяти... но какой возможен выход ? В Си с этим нет проблем, но прогу нужно сделать именно в Дельфях...
Здравствуйте 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)