Ricardo Malikoski wrote:

Resposta no meio do texto.


>     Pessoal passei a utilizar o Delphi.Net (versão 2006) e tive um problemas 
> com classes. Fiz o seguinte:
> 
>    Criei uma classe assim: (deixei ela enxuta assim apenas pra tentar isolar 
> o erro)
> 
> 
> type
>   TPersistente = class(TObject)
>   private
>   public
>     function Persistir() : boolean; virtual; abstract;
>   end;
> 
> em outra unit:
> 
> obs: o tipo "Departamento" é uma classe em outra unit
> 
> type
>   DepartamentoDAO = class (TPersistente)
>   private
>   public
>      function Persistir(pDepto : Departamento) : boolean;  reintroduce; 
> overload;

Você não está implementando o método virtual Persistir, ao invés disto 
você criou outro método com o mesmo nome. Remova o reintroduce, troque 
overload por override. Como métodos override devem ter o mesmo formato 
que o método virtual, então você escolhe entre remover o parâmetro 
pDepto ou adicionar este parâmetro na classe abstrata.


>   end;
> 
> implementation
> 
> 
> { DepartamentoDAO }
> 
> function DepartamentoDAO.Persistir(pDepto: Departamento): Boolean;
> begin
> 
> end;
> 
> 
>     Em uma outra unit quando eu crio o DepartamentoDAO dá um erro de 
> compilação:
> 
> function Departamento.Persistir: Boolean;
> var
>   objPersistente : DepartamentoDAO;
> begin
>   objPersistente := DepartamentoDAO.Create; -->> aqui acontece o erro: 
> [Pascal Error] ClassDepartamento.pas(56): E2402 
>                                                                               
>                             Constructing    instance of abstract class 
> 'DepartamentoDAO'

Até o Delphi não-sei-que-versão, isto era apenas um warning. É o 
problema que eu citei acima, você tem que implementar o método abstrato 
Persistir.


>   result         := objPersistente.Persistir(self);
>   objPersistente.Free;
> end;
> 
> 
> O que fazer ? já tentei várias coisas e nada...
> 


--
Joao Morais

Responder a