Question

Je les deux catégories suivantes:

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 est un (troisième génération) TFrame descendant. Il n'est pas utilisé directement, mais plusieurs autres composants composés en descendent.

TcmDataConnector est un composant qui contient les informations de connexion de base de données pour ces autres composants.

J'utilise ModelMaker, et essaie de mettre en œuvre un observateur modèle de sorte que plusieurs « panneaux de données » peuvent être automatiquement mis à jour chaque fois que le « Data Connector » change d'état.

Voici mon problème: Je ne peux pas sembler contourner le problème « refernece circulaire », chaque classe utilise l'autre dans la section d'interface. Mettre l'associé « utilise » référence dans la section Interface ne disparaît pas la question « identifiant non déclarés », et de les mettre à la fois dans la même unité ne soit. En ce moment, ils sont dans la même unité (je les ai essayé dans des unités séparées, et en même temps), et je reçois le « identificateur undeclared: TcmTPDataConnector » erreur.

Comment puis-je contourner cela?

================
MISE À JOUR:

Il est vendredi soir à 21h30 où je suis, et je suis tout à fait coincé. Situé à quelques minutes après mon post, vous les gens !! JOUR SAUVE (Nuit!) MERCI !!

L'homme, j'aime StackOverflow .... si mon ami dans cette saison folle comme l'apprentissage. :) Merci, merci, merci ...

Était-ce utile?

La solution

Sur la même unité, procédez comme suit:

TcmTPDataConnector = class(TComponent);


TcmTPDataPanel = class(TcmTPBasePanel)
   ... 
end;

TcmTPDataConnector = class(TComponent)
  ...
end;

Autres conseils

Une autre option est d'utiliser des interfaces, mais je pense que dans ce cas, il serait overengineered.

Deux options:

1) Mettez dans la même unité, le même bloc de type à l'intérieur. Avant de déclarer TcmTPDataConnector, déclarer l'autre type, puis le déclarer. (Voir le poste de jcinacio)

2) Faire un ancêtre de TcmTPDataConnector qui contient ce qui doit être disponible à l'extérieur et de faire vos références soient à cela. Ceci est plus d'un mal de tête, mais vous permet de le faire sur plusieurs unités.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top