문제

다음 두 수업이 있습니다.

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는 이러한 다른 구성 요소에 대한 데이터베이스 연결 정보를 보유하는 구성 요소입니다.

모델 메이커를 사용하고 있으며 "데이터 커넥터"가 상태를 변경할 때마다 여러 "데이터 패널"을 자동으로 업데이트 할 수 있도록 관찰자 패턴을 구현하려고합니다.

내 문제는 다음과 같습니다. 각 클래스가 인터페이스 섹션에서 다른 클래스를 사용하기 때문에 "원형 참조"문제를 해결할 수없는 것 같습니다. 인터페이스 섹션에 연관된 "사용"참조를 넣는 것은 "선언되지 않은 식별자"문제를 지우지 않으며 동일한 단위에 두는 것은 아닙니다. 지금 당장 그들은 같은 단위에 있으며 (나는 그것들을 별도의 단위로 시도하고 함께 시도했고) "노출되지 않은 식별자 : tcmtpdataconnctor"오류를 얻습니다.

이 문제를 어떻게 해결할 수 있습니까?

================
업데이트:

금요일 밤 오후 9시 30 분에 내가있는 곳에서 나는 완전히 갇혀있었습니다. 내 게시물 후 몇 분 후, 당신은 하루를 구했습니다 !! (밤!) 감사합니다 !!

남자, 나는 stackoverflow를 좋아합니다 .... :) 감사합니다, 감사합니다, 감사합니다 ...

도움이 되었습니까?

해결책

같은 장치에서 다음을 시도하십시오.

TcmTPDataConnector = class(TComponent);


TcmTPDataPanel = class(TcmTPBasePanel)
   ... 
end;

TcmTPDataConnector = class(TComponent)
  ...
end;

다른 팁

또 다른 옵션은 인터페이스를 사용하는 것이지만,이 경우에는 과도하게 참여할 것이라고 생각합니다.

두 가지 옵션 :

1) 그것들을 동일한 단위, 동일한 유형 블록 안에 넣습니다. TCMTPDATACONNECTERCERCERTECTERECTER를 선언하고 다른 유형을 선언 한 다음 선언합니다. (Jcinacio의 게시물 참조)

2) 외부에서 사용할 수있는 것이 포함되어있는 TCMTPDATACONCENCER의 조상을 만들고 참고 문헌을이를 참조하십시오. 이것은 두통이지만 여러 단위에 걸쳐 수행 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top