Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вызов метода обьекта в списке, разных обьектов 
V
    Опции темы
lebaon
Дата 29.7.2007, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 10.3.2006

Репутация: нет
Всего: нет



такая ситуация: есть несколько классов
Код

gameobject = class
    procedure show;virtual;abstract; 
    constructor create;
    destructor destroy;

end;
pgameobject = ^gameobject;

GO_2d = class (gameobject)
    procedure show;override;
    constructor create;
    destructor destroy;
end;

init_object = class (gameobject)
    procedure show;
    constructor create;


end;


есть список с обьектами классов init_object и GO_2d под названием mainlist
когда я делаю так:

Код

ic:=0;
    if ic<>mainlist.Count then
    begin
    repeat
    po:=mainlist.Items[ic];
    po^.show;
    glPopMatrix;{восстанавливает матрицу взгляда игрока}
    ic:=ic+1;
    until ic=mainlist.Count;


на строке po^.show; вылетает, хотя по идее должна вызывать GO_2d.show или init_object.show,
вопрос, в чем я ошибся?  smile 
PM MAIL ICQ   Вверх
Yanis
Дата 29.7.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Не в обиду будет сказано.
Я всегда был в шоке над программерами игр. 
Точнее над стилем кодирования smile
А с какой ошибкой вылетает?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
bems
Дата 29.7.2007, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



1) не надо указателей на классы ибо итак все уже сделано за тебя
2) покажи как заполняешь список


--------------------
Обижено школьников: 8
PM MAIL   Вверх
MetalFan
Дата 29.7.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



а override на show в init_object? + замечание про указатель... не нужен он.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
lebaon
Дата 29.7.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 10.3.2006

Репутация: нет
Всего: нет



заполняю список так
Код

constructor gameobject.create;
begin
inherited create;
mainlist.Add(@self);


end;



destructor gameobject.destroy;
begin
mainlist.Remove(@self);
end;


пробовал и без указателя, вот так
Код

ic:=0;
    if ic<>mainlist.Count then
    begin
    repeat
   gameobject(mainlist.Items[ic])^.show;
    glPopMatrix;{восстанавливает матрицу взгляда игрока}
    ic:=ic+1;
    until ic=mainlist.Count;

результат такой же, улетает куда то в ffffffff   smile 
а что овверайд? его не нужно? а то я запутался  smile 
PM MAIL ICQ   Вверх
MetalFan
Дата 29.7.2007, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(lebaon @  29.7.2007,  15:29 Найти цитируемый пост)
пробовал и без указателя, вот так

как без указателя? а что тогда там шляпа делает опять???


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
bems
Дата 29.7.2007, 18:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



убираешь собак:
Код

constructor gameobject.create;
begin
inherited create;
mainlist.Add(self);


end;



destructor gameobject.destroy;
begin
mainlist.Remove(self);
end;


убираешь шляпы:
Код

ic:=0;
    if ic<>mainlist.Count then
    begin
    repeat
   gameobject(mainlist.Items[ic]).show;
    glPopMatrix;{восстанавливает матрицу взгляда игрока}
    ic:=ic+1;
    until ic=mainlist.Count;


потом
Цитата(MetalFan @  29.7.2007,  15:07 Найти цитируемый пост)
а override на show в init_object?


если список - потомок TObjectList то будет работать
если нет - то при добавлении и удалении нужно привести объект к указателю 
Код

pointer(self)




--------------------
Обижено школьников: 8
PM MAIL   Вверх
MetalFan
Дата 29.7.2007, 20:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(bems @  29.7.2007,  18:44 Найти цитируемый пост)
потом
Цитата(MetalFan @  29.7.2007,  15:07 Найти цитируемый пост)
а override на show в init_object?


если список - потомок TObjectList то будет работать
если нет - то при добавлении и удалении нужно привести объект к указателю 

эмм... я немного про другое... там не перекрыт метод show. при приведении к базовому классу, в случае, если это объект класса init_object словим Abstract Error


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
bems
Дата 29.7.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(MetalFan @  29.7.2007,  20:55 Найти цитируемый пост)
 я немного про другое
ты не про другое. Это я в порядке перечисления  

Это сообщение отредактировал(а) bems - 29.7.2007, 21:06


--------------------
Обижено школьников: 8
PM MAIL   Вверх
MetalFan
Дата 29.7.2007, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



bems, а, сорь) я нипонял)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
lebaon
Дата 30.7.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 10.3.2006

Репутация: нет
Всего: нет



Цитата

эмм... я немного про другое... там не перекрыт метод show. при приведении к базовому классу, в случае, если это объект класса init_object словим Abstract Error

 и как я не заметил?  smile  исправил, спасибо!
bems
про собак и шляпы не очень понял
а вот смена списка на TObjectList помогла, спасибо! smile 
PM MAIL ICQ   Вверх
bems
Дата 30.7.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(lebaon @  30.7.2007,  12:39 Найти цитируемый пост)
про собак и шляпы не очень понял
все просто. если ты хочешь получить указатель на объект то просто приводишь переменную типа класс к указателю (потому что физически это и есть указатель).
@self - указатель на указатель на объект
pointer(self) - указатель на объект
но с TObjectList указатели вообще не нужны

Добавлено через 1 минуту и 29 секунд
ну и там где у тебя была шляпа (^) она тоже не нужна, а нужно простое приведение gameobject(mainlist.Items[ic])


--------------------
Обижено школьников: 8
PM MAIL   Вверх
lebaon
Дата 30.7.2007, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 10.3.2006

Репутация: нет
Всего: нет



Цитата

все просто. если ты хочешь получить указатель на объект то просто приводишь переменную типа класс к указателю (потому что физически это и есть указатель).
@self - указатель на указатель на объект

вот где собака порылась...я и не знал про это smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0556 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.