Главная страница
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.027 c
14-81917
Dmitriy O.
2003-08-07 10:53
2003.08.25
Двойные стандарты !!!


1-81810
Евгений12
2003-08-13 18:49
2003.08.25
Как из набора символов 296215Е34523 исключить Е


1-81678
ki11er
2003-08-11 16:26
2003.08.25
Можно ли подключить исходник rtl к проекту?


1-81643
Erik
2003-08-12 12:11
2003.08.25
Как пробежать по XML и считать атрибуты?


14-81915
Иван Шихалев
2003-07-27 19:48
2003.08.25
---|Ветка была без названия|---