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