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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.02.2009, 10:16
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию ООП. Обращение к полю объекта, до его конструктора

Очень нужно решить проблему. Делаю симуляцию взрыва, короче неважно. По делу есть класс
Код:
type
  TWorld_ODE = class
Lavel:string;
...
constructor Create;
...

И есть процедура FormCreate, в которой я по идее должен написать (форма у меня называется TfrmRagdoll)
Код:
procedure TfrmRagdoll.FormCreate(Sender: TObject);
begin
 WorldODE.Lavel:='low';
  WorldODE := TWorld_ODE.create{('Hight')};//Level - качество физикиэ
...
Но поскольку конструктор у меня появляется после попытки присваивания переменной Lavel значения, то после запуска вылезает ошибка. Как быть?
Ответить с цитированием
  #2  
Старый 21.02.2009, 10:55
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
По умолчанию

А зачем ты вообще выполняешь
Код:
WorldODE.Lavel:='low';
до создания объекта?
Для чего это надо и, возможно, это сделать иначе?
__________________
Велик и могуч наш Object Pascal !
ICQ: 357-591-887
Ответить с цитированием
  #3  
Старый 21.02.2009, 11:00
Аватар для Karsh
Karsh Karsh вне форума
Активный
 
Регистрация: 22.09.2007
Адрес: SPb
Сообщения: 228
Версия Delphi: 7, 2009, XE2
Репутация: 70
По умолчанию

а не проще присваивать значение "low" в самом классе при создании с определенньм пораметром?
Ответить с цитированием
  #4  
Старый 21.02.2009, 12:17
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,018
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Укажи конструктор как виртуальный и дефолтное значение присвяивай в конструкторе. Если сделать конструктор виртуальным, то дефолтный конструктор без параметров будет невиден. Обращаться к объекту до его создания нельзя.

Код:
type
  TMyClass = class
  ...
  public
     constructor Create(AParam : String); virtual; // теперь Create() "невиден"
  end;
Ответить с цитированием
  #5  
Старый 23.02.2009, 18:30
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

Я наверно немножко вас запутал, плохо расписав задачу и написав {('Hight')};. Параметр действительно закоментирован, это не ошибка.

2Karsh,
задавшись этим вопросом, я написал:
Код:
constructor TWorld_ODE.create;
...
begin
    WorldODE.Lavel := 'Hight';
...
И всё, кирдык, при запуске вылетает ошибка.

2Imikle,
ошибка та же, что и описаная выше
Ответить с цитированием
  #6  
Старый 23.02.2009, 18:34
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
По умолчанию

Вместо:
Код:
constructor TWorld_ODE.create;
...
begin
    WorldODE.Lavel := 'Hight';
...

Попробуй:
Код:
constructor TWorld_ODE.create;
...
begin
    Self.Lavel := 'Hight';
...
__________________
Велик и могуч наш Object Pascal !
ICQ: 357-591-887
Ответить с цитированием
  #7  
Старый 24.02.2009, 16:06
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

точняк, совсем вылетела из головы эта ссылка (Self) на экземпляр класса. Спасибо. Тему можно закрыть (или удалить).

Последний раз редактировалось DungeonLords, 24.02.2009 в 21:42.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter