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.