![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
Привет всем.Есть класс-предок и, соответственно, его наследник. Код:
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 нет. Почему??? Последний раз редактировалось DungeonLords, 23.05.2010 в 22:57. |
|
#2
|
|||
|
|||
|
Т.к. вы не описали конструктор и деструктор, то будут выполняться конструктор и деструктор предка, а именно TObject.
Деструктор вызывается не так, а вот так: Код:
FPole.Destroy; Последний раз редактировалось Kapitoshka438, 23.05.2010 в 23:21. |
|
#3
|
|||
|
|||
|
Цитата:
Цитата:
|
|
#4
|
|||
|
|||
|
А... Я врубился, я пытаюсь обратиться к Value.Enabled, но оно ведь тоже пока не существует!
|
|
#5
|
|||
|
|||
|
Так, это строчка из процедуры SetEnabled, но вы же не вызываете ее сами. У вас где-то должна быть строчка Enabled := True (или False). Нужен фрагмент кода вокруг этой строчки, желательно вся процедура (функция), внутри которой она находится.
|
|
#6
|
|||
|
|||
|
Интересно конечно у вас классы устроены. Старайтесь вовремя уничтожать объекты, раз уж у вас в таком месте конструктор используется. Если вы в качестве параметра в процедуру SetBaseVersion передадите уже созданный объект, вы потеряете выделенный изначально кусок памяти.
|