Текущий архив: 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