![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
[Fatal Error] Usel.pas(5): Circular unit reference to Usel [D5]
Vladislav_72 © (2002-05-28 19:37:00)Помогите! Проект уже два дня стоит.
unit Usel;
uses .....,BaseLine;
interface
type
TLines = array [1..4] of TBaseLine; описал тип
TUsel = class(TGraphicControl)- пусть это класс А
private
FLines:TLines; - описал поле
...
unit BaseLine;
uses .....,Usel;
interface
type
TUselss = array [1..2] of TUsel; описал тип
TBaseLine = class(TGraphicControl))- пусть это класс B
private
FUselss:TUselss; - описал поле
....
[Fatal Error] Usel.pas(5): Circular unit reference to "Usel"
Как избавиться от циклической зависимости.
Ну нужны мне классе А поле FLines содержащий класс BaseLine,
а в классе В поле FUselss содержащие класс Usel.
Что делать помоги-и-ите.
oomneeq (2002-05-30 21:13:00) [1]>Vladislav_72 (30.05.02 17:36)
>To SerGa©
>Насколько я знаю директивой forward описывают только процедуры и функции, а классы нет.
Описывают, описывают. еще как.
Только самого слова forward писать не надо.
KS подсказал правильный выход.
Esu (2002-05-30 18:08:00) [2]Тут уже ничего не поможет :) Этот код мне произведение Пелевина напомнил (во дожился).
(только для выражения мысли, философию не трогать)
"
- Что есть мир
- Мир это Йа
- А я кто ?
- Ты и есть мир, он в тебе
- Йа понял
"
Или там орех содержит в себе тыкву, которая в свою очередь содержит в себе орех.
Anatoly Podgoretsky (2002-05-30 17:56:00) [3]Vladislav_72 (30.05.02 01:11)
А то, что ты из разных модулей никак не сможешь к ним обратиться
Vladislav_72 (30.05.02 17:36)
Ты понял неправильно
Vladislav_72 (2002-05-30 17:36:00) [4]To SerGa©
Насколько я знаю директивой forward описывают только процедуры и функции, а классы нет.
SerGa (2002-05-30 02:17:00) [5]> Ну нужны мне в классе А поле FLines содержащий класс BaseLine,
а в классе В поле FUselss содержащие класс Usel.
Таким образом в классе ВаseLine храниться класс Usel, а в Usel храниться класс BaseLine. Пихать все в один юнит, тоже не получиться. Потому что допустим что сначала опишу Usel потом BaseLine, т.к. BaseLine опишиться ниже, то в Usel (который вверху) компилятор не видит поле типа BaseLine (которое описано внизу).
А директива forward Вам не известна?
KS (2002-05-30 02:14:00) [6]А если все-таки в один модуль ?
type
TBaseLine = class;
TLines = array [1..4] of TBaseLine;
TUsel = class(TGraphicControl)
private
FLines: TLines;
end;
TUselss = array [1..2] of TUsel;
TBaseLine = class(TGraphicControl)
private
FUselss: TUselss;
end;
Vladislav_72 (2002-05-30 01:16:00) [7]To Cobalt ©
Хочу посмотреть на пример указателей, которые позже в implementation буду приводить к нужному мне типу.
Vladislav_72 (2002-05-30 01:11:00) [8]To Cobalt©
Ну нужны мне в классе А поле FLines содержащий класс BaseLine,
а в классе В поле FUselss содержащие класс Usel.
Таким образом в классе ВаseLine храниться класс Usel, а в Usel храниться класс BaseLine. Пихать все в один юнит, тоже не получиться. Потому что допустим что сначала опишу Usel потом BaseLine, т.к. BaseLine опишиться ниже, то в Usel (который вверху) компилятор не видит поле типа BaseLine (которое описано внизу).
TO Anatoly Podgoretsky ©
Я конечно новичок, но выражение типа -> Тебе поможет только пистолет, FLines и BaseLine, приватные! Мне пока не о чём не говорит. Ну и что Что приватные... Непонял ?
SerGa (2002-05-29 02:48:00) [9]Лично моя жизнь. Описываю подобные "общие" константы, классы, записи, типы,и т.д. в отдельном модуле, который и записываю в Uses соответствующих модулей.
При всем при этом, всячески стараюсь избежать ссылки на модуль в секции "interface", ибо, чаще всего - это не нужно. И чаще всего - вредно!
В то время как ссылка на модуль в секции "implementation" еще никому, никогда, не портила жизнь.
Cobalt (2002-05-29 00:29:00) [10]Ну, и конечно, не забудь для 2-го - в implementation uses указать юниты
Cobalt (2002-05-29 00:27:00) [11]>MaximatorVeter © (28.05.02 20:17)
>Разбить проект на модули так, чтобы не было циклических ссылок и все дела!
1)Нифига подобного! Как раз наоборот.
Пихай все в один юнит.
2)Используй указатели, которые позже в implementation будешь приводить к нужному тебе типу.
Anatoly Podgoretsky (2002-05-28 20:39:00) [12]Vladislav_72 (28.05.02 19:37)
Тебе поможет только пистолет, FLines и BaseLine, приватные!
MaximatorVeter (2002-05-28 20:17:00) [13]Разбить проект на модули так, чтобы не было циклических ссылок и все дела!
Vladislav_72 (2002-05-28 20:04:00) [14]Мне надо чтобы все работало... Вот такая беда прям...
У кого есть какие соображения ????
Vladislav_72 (2002-05-28 20:02:00) [15]Если ставлю туда, это в хелпе так написано.
Тогда [Error] Usel.pas(9): Undeclared identifier: "TBaseLine"
Ругается на строчку класса А TLines = array [1..4] of TBaseLine;
Потому что Класс описан выше по тексту, а implementation ниже.
Esu (2002-05-28 19:54:00) [16]Ставь uses <...> не в начале, а в implementation
Например:
implementation
uses Log, Main;