Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.25;
Скачать: CL | DM;

Вниз

Проблема с наследованием   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.028 c
1-81675
Manfred
2003-08-11 16:54
2003.08.25
Контейнер для хранения небольших данных.


1-81696
Vint45
2003-08-11 11:58
2003.08.25
Отслеживание событий


14-81955
NetKnight
2003-08-06 12:43
2003.08.25
Написание FireWall


7-81985
UR7IUL
2003-06-08 02:52
2003.08.25
Опрос параметров железа под Win9X/2K/XP на аппаратном уровне


8-81842
zorg2003
2003-04-26 00:43
2003.08.25
MMSYSTEM some questions