у меня есть следующие два класса:Циклическая ссылка вопрос с классами, которые используют друг друга
TcmTPDataPanel = class(TcmTPBasePanel)
Database: TnxDatabase;
Session: TnxSession;
private
FDataConnector: TcmTPDataConnector;
MyNxDataBase: TnxDatabase;
MyNxSession: TnxSession;
MyRefNxDataBase: TnxDatabase;
protected
procedure Disconnect; virtual; abstract;
procedure Refresh; virtual;
procedure Requery; virtual; abstract;
public
procedure Connect;
published
property DataConnector: TcmTPDataConnector read FDataConnector write
FDataConnector;
end;
TcmTPDataConnector = class(TComponent)
private
FDatabase: TnxDatabase;
FObservers: TList;
FTableForCategories: TnxTable;
FTableForItemCategoryLinks: TnxTable;
FTableForItems: TnxTable;
procedure SetTableForItemCategoryLinks(const Value: TnxTable);
protected
procedure IterateObservers;
public
constructor Create;
destructor Destroy; override;
procedure Register(Instance: TcmTPDataPanel);
procedure Unregister(Instance: TcmTPDataPanel);
published
property Database: TnxDatabase read FDatabase write FDatabase;
property TableForCategories: TnxTable read FTableForCategories write
FTableForCategories;
property TableForItemCategoryLinks: TnxTable read
FTableForItemCategoryLinks write SetTableForItemCategoryLinks;
property TableForItems: TnxTable read FTableForItems write FTableForItems;
end;
TcmDataPanel является (3-е поколение) TFrame потомка. Он не используется напрямую, но из него вытекают несколько других составных компонентов.
TcmDataConnector - это компонент, который содержит информацию о соединении с базой данных для этих других компонентов.
Я использую ModelMaker и пытаюсь реализовать шаблон Observer, так что несколько «Панели данных» могут автоматически обновляться всякий раз, когда «Data Connector» изменяет состояние.
Вот моя проблема: я не могу обойти проблему «круглого обратного вызова», так как каждый класс использует другую в разделе «Интерфейс». Помещение ссылки «uses» в разделе «Интерфейс» не устраняет проблему «Необъявленный идентификатор», а также не помещает их в одну и ту же единицу. Сейчас они находятся в одном блоке (я пробовал их в отдельных подразделениях и вместе), и я получаю ошибку «Undeclared identifier: TcmTPDataConnector».
Как я могу обойти это?
================
UPDATE:
Это пятницу вечером в 9:30 вечера, где я, и я был полностью застрял. Просто через MINUTES после моего поста, вы, люди, СОХРАНИЛИ ДЕНЬ! (ночь!) СПАСИБО!
Человек, я люблю StackOverflow .... ТАК, мой друг в этом учебном сумасшедшем сезоне. :) Спасибо, спасибо, спасибо ...
Это не скомпилирует! Опустить первый (Tкомпонент). Он должен быть = class; –
СПАСИБО, вы оба! :) – Jamo
Они должны быть определены в блоке того же типа. –