Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2012, 21:36   #1
luckyleo769
 
Регистрация: 14.07.2012
Сообщений: 9
Злость Классы и передача Self

Здравствуйте ув. форумчане!

Вот существует такой код:

Код:
 Type
    TObj=class
       ...
    End;

 PObj=^TObj;

 Type
    TFormsElements=class
      Objects:array of PObj;
      Procedure RegisterMySelf(Obj:PObj);
    End;

   PFormsElements=^TFormsElements;


 Type
     TOtherObj=class(TObj)
       ...
       Constructor Create(Elem: PFormsElements);
     End;

...


Procedure TFormsElements.RegisterMySelf(Obj: PObj);
Begin
  SetLength(Objects,Length(Objects)+1);
  Objects[Length(Objects)-1]:=Obj;
End;



Constructor TOtherObj.Create(Elem: PFormsElements);
Begin
   ...
   Elem.RegisterMySelf(@Self);
End;

  ...
  var
     FE:TFormsElements;
     Elem:TOtherObj;
  Begin
      FE:=TFormsElements.Create;
      Elem:=TOtherObj.Create(@FE);
      ...
  End;
  ...

Каким-то образом Self в конструкторе не передается методу...
При дальнейшем обращении к
Код:
Elem.Object[i].#######
вылетает ошибка "Access violation at address..."

Но если убрать вызов метода из конструктора и вместо этого сделать вот так:

Код:
  ...
  var
     FE:TFormsElements;
     Elem:TOtherObj;
  Begin
      FE:=TFormsElements.Create;
      Elem:=TOtherObj.Create;
      FE.RegisterMySelf(@Elem);
      ...
  End;
  ...
То все нормально: обращение к FE.Objects[i] проходит нормально.

Почему? Что можно с этим сделать
luckyleo769 вне форума Ответить с цитированием
Старый 30.12.2012, 22:10   #2
VVkSoft
Пользователь
 
Аватар для VVkSoft
 
Регистрация: 06.09.2009
Сообщений: 66
По умолчанию

ИМХО Кажется что ви хотите передать указатель на обєкт которой ищо в процессе сотворения.
Возможно кто меня исправить
VVkSoft вне форума Ответить с цитированием
Старый 30.12.2012, 23:43   #3
luckyleo769
 
Регистрация: 14.07.2012
Сообщений: 9
По умолчанию

Попробовал из другого метода сделать(после создания объекта) - то же самое....
luckyleo769 вне форума Ответить с цитированием
Старый 30.12.2012, 23:50   #4
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Цитата:
Сообщение от luckyleo769 Посмотреть сообщение
PObj=^TObj;
Что это за бред? Выпилить к чертовой матери! TObj и так уже указатель, раз объявляяется ключевым словом class.
Vapaamies на форуме Ответить с цитированием
Старый 30.12.2012, 23:54   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Выкинуть все замуты с указателями и делать просто передачу объектов, а не указателей на них. Подозреваю, что адрес неявной переменной Self после выхода из метода не является валидным, а вы его наружу передали и сохранили. А так чисто по логике - всё должно быть ок, и селф прекрасно из конструктора можно использовать, но не по указателям.
phomm вне форума Ответить с цитированием
Старый 31.12.2012, 01:07   #6
luckyleo769
 
Регистрация: 14.07.2012
Сообщений: 9
По умолчанию

Исправил - работает. Но ведь получается два одинаковых объекта (один в Elem, другой в FE.Objects[X]), вместо объекта и указателя на него или я чего-то недопонимаю?
luckyleo769 вне форума Ответить с цитированием
Старый 31.12.2012, 01:09   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Объект один, а указателей на него несколько
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.12.2012, 01:18   #8
luckyleo769
 
Регистрация: 14.07.2012
Сообщений: 9
По умолчанию

Все перепроверил. И правда! Спасибо! Тема закрыта=)
luckyleo769 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
классы в C++ :-))))) Obi_Van Помощь студентам 0 28.05.2011 21:37
С++ классы Azgor Помощь студентам 3 26.05.2010 22:42
Классы в С++ Stager Помощь студентам 4 05.05.2009 10:05
классы Valerik Общие вопросы C/C++ 2 22.04.2009 22:10