GARANTIR DESCONTO

Fórum Referência circular #298895

10/10/2005

0

Olá pessoal, tô com um perrengue sinistro!

É o seguinte: tenho uma classe de negócios TPeca, que possui métodos de persistência como Salvar, Consultar, Excluir etc. Esses métodos usam uma classe utilitária responsável pelos detalhes de persistência, TRepositorioPeca.

O problema é que TPeca possui um TRepositorioPeca, mas TRepositorioPeca também referencia TPeca em seus métodos. Tipo assim, TPeca.Salvar chamaria TRepositorioPeca.Salvar(Self), onde Self é to tipo TPeca.

O problema é que colocando TPeca e TRepositorioPeca em units separadas dá erro fatal de referência circular, e na mesma unit ocorre o seguinte na declaração das classes:

TPeca referencia TRepositorioPeca, que só está definida abaixo e o Delphi diz que não conhece TRepositorioPeca. E se inverto a ordem também acontece! TRepositorioPeca referencia TPeca que está definida abaixo e é desconhecida...

Acho que não teria problema fazer isso com Java... Alguém tem uma solução? :D

[quote:7ea07b62d8=´Moderação´]Título editado por Massuda.

Removido do título: ´perrengue sinistro!´[/quote:7ea07b62d8]


Renatosilva

Renatosilva

Responder

Posts

10/10/2005

Massuda

O problema é que colocando TPeca e TRepositorioPeca em units separadas dá erro fatal de referência circular,
Isso não funciona.

e na mesma unit ocorre o seguinte na declaração das classes: TPeca referencia TRepositorioPeca, que só está definida abaixo e o Delphi diz que não conhece TRepositorioPeca. E se inverto a ordem também acontece! TRepositorioPeca referencia TPeca que está definida abaixo e é desconhecida...
Para não dar erro, faça algo assim...
type
  TRepositorioPeca = class;

  TPeca = class...
    // definição de TPeca
  end;

  TRepositorioPeca = class...
    // definiçào de TRepositorioPeca
  end;
...a primeira referência a TRepositorioPeca avisa o compilador que isso é uma classe, mas não define a classe.


Responder

Gostei + 0

10/10/2005

Renatosilva

Caraca massuda!!! Muito boa!! Valeuzão cara, funcionou!

Agora eu entendo o porquê de várias classes da VCL estarem com essa declaração simplória... muito legal... valeu!!! :D :D


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar