Einzelnen Beitrag anzeigen

USchuster

Registriert seit: 12. Sep 2010
Ort: L.E.
120 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Aufruf abstrakter Methode führt zu Fehler

  Alt 12. Feb 2011, 23:28
In meiner Oberklasse TFahrzeug habe ich zwei Methoden als Abstract deklariert, da sie erst im Nachfahren implementiert werden soll. Im Nachfahren habe ich diese Methoden mit OVERRIDE überschrieben und implementiert -- dennoch kracht es nun beim Aufruf einer dieser Methoden: 'Abstrakter Fehler'.
Ich sehe auch keine Warnung im Sinne von 'a verdeckt b'.

Jemand eine Idee, was ich da falsch mache?
Rufst Du zufällig inherited Methodenname; in den Implementierungen auf? (auch wenn das keinen Sinn macht)

Folgendes Beispiel funktioniert solange man nicht ABSTRACTERROR definiert.

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{.$DEFINE ABSTRACTERROR}

uses
  SysUtils;

type
  TFahrzeug = class(TObject)
    procedure Verzoegern; virtual; abstract;
    procedure Beschleunigen; virtual; abstract;
  end;

  TPKW = class(TFahrzeug)
  public
    procedure Verzoegern; override;
    procedure Beschleunigen; override;
  end;

{ TPKW }

procedure TPKW.Beschleunigen;
begin
  inherited {$IFDEF ABSTRACTERROR}Beschleunigen{$ENDIF};
  asm
    nop
  end;
end;

procedure TPKW.Verzoegern;
begin
  inherited {$IFDEF ABSTRACTERROR}Verzoegern{$ENDIF};
  asm
    nop
  end;
end;

var
  Fahrzeug: TFahrzeug;
begin
  try
    Fahrzeug := TPKW.Create;
    try
      Fahrzeug.Beschleunigen;
      Fahrzeug.Verzoegern;
    finally
      Fahrzeug.Free;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  ReadLn;
end.
  Mit Zitat antworten Zitat