Показать сообщение отдельно
  #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
Ответить с цитированием