Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.10;
Скачать: CL | DM;

Вниз

---|Ветка была без названия|---   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
1-30822
Wins
2002-05-31 13:58
2002.06.10
создать doc - файл и заполнить в нем таблицу


14-30993
arbiter
2002-05-03 19:27
2002.06.10
Наши или не наши?


1-30866
dimich
2002-05-29 14:37
2002.06.10
Вопрос про иконки!!!!


7-31017
lexxvlad
2002-03-15 06:17
2002.06.10
Прочитать данные из com порта


4-31046
SeriogaL
2002-04-04 19:47
2002.06.10
Как вызвать функцию из 16 битного приложения ?