![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| bulldog |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 16.9.2003 Репутация: нет Всего: нет |
Посоветуйте как поступить!!!
Проблема, в упрощенном виде, следующая: Есть класс А и класс Б, причем класс А содержит свойство - класс Б, а класс Б содержит свойство класс А. Выглядит как-то так: unit AB; interface type A=class ................ Om:B; Im:B; end; type B=class ...................... Om:A; Im:A; end; При компиляции возникает проблема: так как 1-м описан класс А, то класса Б компилятор еще не видит, говорит "Тип не известен". Есть мысль выкрутится указателями, но в пользовании будет не очень удобно, ведь можно было бы указывать А.Б.Свойство, а так прийдется явно заниматься приведением типов. Поекспериментировал с наследственностью, описал оба класса как потомков от некоторого класса ABMain, а в классе А описал Om как ABMain. В класс А добавил метод function A.GetOM:ABMain; begin result:=B(Self.Om); end; Но не смотря на приведение типа метод возвращает объект типа ABMain, вместо ожидаемого B. Подскажите какие есть выходы в такой ситуации |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| bulldog |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 16.9.2003 Репутация: нет Всего: нет |
type
TB = class; Так попробывал, результат - Error :: Type 'TB' is not yet completely defined |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
правильно. потому что кроме TB = class ты ничего больше не написал, дельфя это посчитала forward-декларацией и выматерилась. ниже класс должен быть объявлен полностью.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| bulldog |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 16.9.2003 Репутация: нет Всего: нет |
Ура, заработало!!!!
Спасибо. Я каждый класс описывал в своей секции type, как только объединил их в одну, откомпилилось без проблем !!!!!!! |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |