Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.05.2010, 22:42
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию AV из-за попытки присовоить поле класса

Привет всем.

Есть класс-предок и, соответственно, его наследник.

Код:
  TP = class
  private
{Тут много разных полей, не относящихся к делу...}
  FEnabled:Boolean;
  protected
  SetEnabled(Value:Boolean);
  public
  property  Enabled:Boolean read FEnabled write SetEnabled;
  end;

  Tx = class
  FPole:TP;
  public
  procedure SetBaseVersion(Value:TP);
  published
  property Prop:TP read FPole write SetBaseVersion;
  end;

...
procedure TP.SetEnabled(Value:Boolean);
begin
FEnabled:=Value;
end;

procedure TX.SetBaseVersion(Value:TP);
begin
if Value.Enabled=True then FPole:=TP.Create;
end;

Моя проблема заключается в том, что я не понимаю, почему вперёд вызывается TP.SetEnabled, а не TX.SetBaseVersion. Из-за того, что вперёд вызывается SetEnabled, комп выдаёт ошибку AV. Вопрос: как исправить? Как вызывать сначало TX.SetBaseVersion? Или что в моей ситуации можно придумать?

Дополнительный вопрос. Очень интересно, посмотрите, у TP нет конструктора, как и деструктора. Но я могу написать FPole:=TP.Create, а FPole:=TP.Destroy нет. Почему???
__________________
Делаем'c разные игры. Искать на glscene.ru

Последний раз редактировалось DungeonLords, 23.05.2010 в 22:57.
Ответить с цитированием
  #2  
Старый 23.05.2010, 23:17
Kapitoshka438 Kapitoshka438 вне форума
Начинающий
 
Регистрация: 09.11.2009
Сообщения: 145
Репутация: 238
По умолчанию

Т.к. вы не описали конструктор и деструктор, то будут выполняться конструктор и деструктор предка, а именно TObject.
Деструктор вызывается не так, а вот так:
Код:
FPole.Destroy;
Покажите фрагмент кода, где появляется ошибка.

Последний раз редактировалось Kapitoshka438, 23.05.2010 в 23:21.
Ответить с цитированием
  #3  
Старый 23.05.2010, 23:29
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

Цитата:
Сообщение от Kapitoshka438
Деструктор вызывается не так, а вот так:
Код:
FPole.Destroy;
О_o, одна проблема решена. Спасибо.


Цитата:
Сообщение от Kapitoshka438
Покажите фрагмент кода, где появляется ошибка.
FEnabled:=Value;
__________________
Делаем'c разные игры. Искать на glscene.ru
Ответить с цитированием
  #4  
Старый 23.05.2010, 23:36
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

А... Я врубился, я пытаюсь обратиться к Value.Enabled, но оно ведь тоже пока не существует!
__________________
Делаем'c разные игры. Искать на glscene.ru
Ответить с цитированием
  #5  
Старый 23.05.2010, 23:37
Kapitoshka438 Kapitoshka438 вне форума
Начинающий
 
Регистрация: 09.11.2009
Сообщения: 145
Репутация: 238
По умолчанию

Так, это строчка из процедуры SetEnabled, но вы же не вызываете ее сами. У вас где-то должна быть строчка Enabled := True (или False). Нужен фрагмент кода вокруг этой строчки, желательно вся процедура (функция), внутри которой она находится.
Ответить с цитированием
  #6  
Старый 23.05.2010, 23:45
Kapitoshka438 Kapitoshka438 вне форума
Начинающий
 
Регистрация: 09.11.2009
Сообщения: 145
Репутация: 238
По умолчанию

Интересно конечно у вас классы устроены. Старайтесь вовремя уничтожать объекты, раз уж у вас в таком месте конструктор используется. Если вы в качестве параметра в процедуру SetBaseVersion передадите уже созданный объект, вы потеряете выделенный изначально кусок памяти.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:31.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025