Форум: "Основная";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
ВнизПроблема с наследованием Найти похожие ветки
← →
sunsay (2003-08-14 22:57) [0]Здарова, народ, вообщем у меня такая проблема:
Есть односвязный список, допустим List, элементами которого являются объекты PAtom. PStar и PPlanet является потомком PAtom"a. Вообщем заношу я в этот список PStar или PPlanet, и встала проблема как мне выудить из списка допустим объект PStar.
Писал типа:
var
ZS: PStar;
begin
......
ZS := PStar(List.GetItem(i))^;
......
как результат - ошибка во время выполнения.
Насколько я знаю это реально запихнуть PStar в PAtom и достать потом PStar? Тока вот как это сделать... Когда-то получалось, щас уже забыл.
Заранее очень благобдрю.
___________________________
Да прибудет с тобой святой Kernel32
← →
vuk (2003-08-14 23:02) [1]Что такое PAtom? В каком смысле наследники? Экземпляры классов? Если да, то оператор is спасет отца русской демократии.
← →
sunsay (2003-08-14 23:26) [2]Ну не надо воспиринимать все так буквально...
Хорошо пусть будет не PAtom, а допустим TObject, а его потомок - TMyObject. Так вот список односвязный допустим:
type
PListNode = ^TListNode;
TListNode = record
Item: TObject;
Next: PListNode;
end;
.....
Ну вот запихиваем типа:
var
BlaBla: TMyObject; // - ПОТОМОК от TObject
Fist: PListNode;
....
new(First);
//запихиваем, ну допустим
First^.Item := BlaBla;
First^.Next := nil;
...
запихиваетс замечательно (слава ООП!), а вот как выпихнуть обратно?
var
BlaBla: TMyObject;
First: PNodeList;
...
BlaBla := First^.Item; // - компилер непозволит, так как Item - TObject;
BlaBla := TMyObject(First^.Item); // - все нормалек, а во время работы вылетает
Вот вся проблема... Фуф...
___________________________
Да прибудет с тобой святой Kernel32
← →
Юрий Зотов (2003-08-15 00:06) [3]Если во время работы вылетает, значит First^.Item на самом деле не есть TMyObject. Ищите ошибку. Похоже, Вы или не тот объект запихиваете, или забыли его создать.
Попробуйте так - без всяких BlaBla:
New(First);
First^.Item := TMyObject.Create;
First^.Next := nil;
============
with First^.Item as TMyObject do
begin
...
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c