Главная страница
    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.043 c
1-81791
frost
2003-08-14 08:57
2003.08.25
Как отобразить файл с письмом *.eml


3-81596
Flatch
2003-07-29 07:59
2003.08.25
Как сделать группировку ечувствительной к регистру?


1-81633
sergg
2003-08-12 17:47
2003.08.25
Определение является ли строка числом


6-81864
Alish
2003-06-19 01:57
2003.08.25
Подскажите. Для реализации протокола передачи файлов.


1-81728
MoRT
2003-08-10 19:46
2003.08.25
Эмуляция нажатия клавиш





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский