Главная страница
    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.009 c
1-81701
Manfred
2003-08-11 08:32
2003.08.25
Файл qtintf70.dll


1-81796
Relaxxx
2003-08-15 12:00
2003.08.25
Как мне узнать количество дней в прошлом месяце???


7-81966
Фагот
2003-06-10 15:08
2003.08.25
Опять про CD-Rom


1-81662
Юрий Федоров
2003-08-14 17:13
2003.08.25
Создание копии объекта


1-81686
ilka
2003-08-11 14:16
2003.08.25
проблема с TStrings





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