Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-81673
sunsay
2003-08-14 22:57
2003.08.25
Проблема с наследованием


14-81927
TohaNik
2003-08-07 11:25
2003.08.25
Yaffil 8.35 Может так идолжно быть но... предостережение.


1-81687
h@1f-e1f
2003-08-11 11:50
2003.08.25
Загрузка HTML кода


11-81601
Romaizdurdoma
2002-12-05 22:02
2003.08.25
Куда делись хинты в КОЛе


6-81854
gala
2003-06-18 14:53
2003.08.25
JAVA i Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский