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

Вниз

Circular unit reference :(   Найти похожие ветки 

 
Executor ©   (2003-07-09 15:40) [0]

Как избежать Circular unit reference?
Я знаю это запросто возможно, если писать всё в одном юните, а если этих юнитов много? Пихать всё в один - меня не устраивает, слишком всё будет громоздко и легко запутаться в таком большущем коде... Вот для примера:

unit UnitA;

interface

uses
UnitB,
UnitC,
// ...
UnitZ;

type
TA = class
B: TB;
C: TC;
// ...
Z: TZ;
end;

implementation

end.


unit UnitB;

interface

uses
UnitA,
UnitC,
// ...
UnitZ;

type
TB = class
A: TA;
C: TC;
// ...
Z: TZ;
end;

implementation

end.


unit UnitC;

interface

uses
UnitA,
UnitB,
// ...
UnitZ;

type
TC = class
A: TA;
B: TB;
// ...
Z: TZ;
end;

implementation

end.


и т.д.


 
Skier ©   (2003-07-09 15:41) [1]

unit UnitB;

interface

type
TB = class
A: TA;
C: TC;
// ...
Z: TZ;
end;

implementation

uses
UnitA,
UnitC,
// ...
UnitZ;


end.



unit UnitC;

interface

type
TC = class
A: TA;
B: TB;
// ...
Z: TZ;
end;

implementation

uses
UnitA,
UnitB,
// ...
UnitZ;

end.


 
Poirot ©   (2003-07-09 15:54) [2]

ВОТ мем мне сишный #define нравится больше!!!


 
s.ts   (2003-07-09 16:22) [3]

там(в С) все то же самое:
interface = *.h
implementation = *.c


 
mrcat ©   (2003-07-09 16:25) [4]

Executor © (09.07.03 15:40)

не надо "пихать", пишите модули так, чтобы подобных ссылок не возникало.


 
Poirot ©   (2003-07-09 16:26) [5]

Смысл в том, что можно сдеелать так
#ifndef MY_COOL_CLASS
#define MY_COOL_CLASS
...
#endif

и всё будет работать как часы... хоть десять раз друг в друга и ничего не будет ругаться!!!


 
Stas ©   (2003-07-09 16:31) [6]

Просто пиши USES после Implementation, а в нем ссылки на свои модули.


 
s.ts   (2003-07-09 16:52) [7]

>>Poirot © (09.07.03 16:26)
>>и всё будет работать как часы... хоть десять раз друг в друга и ничего не будет ругаться!!!

просто пиши в implementation "и всё будет работать как часы... хоть десять раз друг в друга и ничего не будет ругаться!!!"


 
pasha676   (2003-07-09 16:54) [8]

Главный видит подчиненных, все видят один спецом сделанный юнит глобальных переменных. Обычно так делаю. Всегда хватает. В "тренировочных" прогах (где больше 3-ех модулей фактически не бывает) применяю обычную перехлестку с uses в implementation.


 
Poirot ©   (2003-07-09 17:19) [9]

Вот к этому и виду - неприкольно раскидывать модули по имплементатионам и интерфейсам.....


 
DiamondShark ©   (2003-07-09 19:17) [10]


> Poirot © (09.07.03 17:19)
> Вот к этому и виду - неприкольно раскидывать модули по имплементатионам
> и интерфейсам.....

Неприкольно спать на потолке -- одеяло сползает.
А модульную структуру проектировать надо, а не надеятся на то, что препроцессор соберёт сначала линейный текст, которы потом скушает компилятор.


 
Executor ©   (2003-07-09 22:31) [11]

2Skier: Интересно и как всё, что ты написал, сможешь откомпилить? ;) Помоему то что ты написал - ты придумал на ходу... :) Расскажи каким способом у тя получается запустить этот код? :)


> mrcat © (09.07.03 16:25)
> не надо "пихать", пишите модули так, чтобы подобных ссылок
> не возникало.


Ну а если надо так... Просто у меня так получается - иначе никак...

Вы лучше мне скажите как решить проблему, а не ведите разговор о том насколько это просто в Си++... Не стоит спорить о том что лучше Си или Дельфи? Не об этом тема... :-/


 
DiamondShark ©   (2003-07-10 10:44) [12]

Дык, эта...
Вроде как рассказали уже. Общие описания вынести в третий модуль.


 
Sandman25 ©   (2003-07-10 10:57) [13]

Если есть огромное желание описывать классы в отдельных модулях, то придется использовать что-то типа

unit UnitA;
interface;

type TA=class
B: pointer;
C: pointer;
procedure MyMethod;
end;
implementation
uses UnitB, unitC;

procedure TA.MyMethod;
begin
with TB(B) do ...
with TC(C) do ...
end;

Во всяком случае, другого решения я не нашел.


 
Skier ©   (2003-07-10 11:06) [14]

>Executor © (09.07.03 22:31)
Я лишь написал путь решения проблемы цикличных ссылок : модули подключать не в интерфейсной части
А уж с указателями ты сам борись...


 
Executor ©   (2003-07-11 10:52) [15]

Понятно... Спасибо! Мда... Немного извратно получилось конечно же... Но ладно уж сойдёт и так, раз нельзя подругому... :)



Страницы: 1 вся ветка

Текущий архив: 2003.07.28;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
14-91903
Knight
2003-07-11 01:04
2003.07.28
Apache


11-91697
MTsv DN
2002-11-23 13:04
2003.07.28
Компонент MHComPort


6-91802
Aleksei85
2003-05-18 01:02
2003.07.28
Как узнать, скачивается информация(через модем) или нет


3-91645
Till
2003-06-28 13:16
2003.07.28
DbGridEh (Подсчет суммы)


6-91806
AlLive
2003-05-22 07:29
2003.07.28
Программное изменение проски сервера у IE