Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема организации кода из нескольких модулей [D7, WinXP]


VoyagerEternal ©   (2008-12-21 09:11:00) 

--Первый вопрос--

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


unit UnitA;

uses UnitB;

type

TClass1 = class
x: TClass2;
end;

implementation
...
end.



unit UnitB;

uses UnitA; //здесь ошибка

type

TClass2 = class
x: TClass1;
end;

implementation
...
end.


[Fatal Error] MK_STR.pas(5): Circular unit reference to 'UnitA'

и чо делать? - я хочу чтоб каждый класс был в отдельном файле, они очень большие
(иначе каша получится),  у меня уже несколько раз возникала такая проблема
Как правильно организовать код?

--Второй вопрос--

Есть несколько модулей: Unit1, Unit2, .... Unit20, где написаны самые мои наработки, которые я использую во всех своих проектах.
Не хочу писать длинную строчку:    uses Unit1, Unit2, .... Unit20; в каждом модуле своего нового проекта.
Хочу написать  uses UnitALL;  и все
как это сделать?


sniknik   (2008-12-21 14:00:00) [1]

unit Unit1;

interface

type
TClass2 = class
  c1: TClass;
  function sin(x: Extended): Extended;
end;

TClass1 = class
  c2: TClass;
  function cos(x: Extended): Extended;
  function sin2(x: Extended): Extended;
end;

implementation

function TClass2.sin(x: Extended): Extended;
begin
 sin := System.sin(x);
end;

function TClass1.cos(x: Extended): Extended;
begin
 cos := System.cos(x);
end;

function TClass1.sin2(x: Extended): Extended;
begin
 sin2 := sqr( TClass2(c2).sin(x) );
end;

end.


VoyagerEternal   (2008-12-21 10:54:00) [2]

Попытка создать общий модуль UnitC.

--Попытка первая--
unit UnitC;
interface
type
 TClass1 = class; //[Error] UnitC.pas(7): Type 'TClass1' is not yet completely defined
 TClass2 = class; //[Error] UnitC.pas(7): Type 'TClass1' is not yet completely defined
implementation

end.


--Вторая вторая--
unit UnitC;
interface
type
 TClass1 = class end;
 TClass2 = class end;
implementation

end.


unit UnitB;
interface
 uses UnitC;
type
 TClass2 = class
   c1: TClass1;
   function sin(x: Extended): Extended;
 end;

implementation

function TClass2.sin(x: Extended): Extended;
begin
 sin := System.sin(x);
end;

end.


unit UnitA;
interface
 uses UnitC;
type
 TClass1 = class
   c2: TClass2;
   function cos(x: Extended): Extended;
   function sin2(x: Extended): Extended;
 end;
implementation

function TClass1.cos(x: Extended): Extended;
begin
 cos := System.cos(x);
end;

function TClass1.sin2(x: Extended): Extended;
begin
 sin2 := sqr( c2.sin(x) );//класс c2 пустой нет там функции sin() //[Error] UnitA.pas(23): Undeclared identifier: 'sin'
end;

end.


PZ   (2008-12-21 09:48:00) [3]

Не обратил внимания.
Видимо надо организовать общий модуль UnitС, где и определить модули UnitA и UnitВ


VoyagerEternal   (2008-12-21 09:36:00) [4]

>PZ

TClass1 = class
x: TClass2; --> [Error] UnitA.pas(10): Undeclared identifier: 'TClass2'
end;


PZ   (2008-12-21 09:18:00) [5]

1.
unit UnitA;

type

TClass1 = class
x: TClass2;
end;

implementation
uses UnitB;
...
end.

unit UnitB;

type

TClass2 = class
x: TClass1;
end;

implementation
uses UnitA;
...
end.


Наверх

Титульная страница Поиск, карта сайта Написать письмо