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