Einzelnen Beitrag anzeigen

Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#16

AW: Aufruf abstrakter Methode führt zu Fehler

  Alt 13. Feb 2011, 13:56
... wir sprechen hier über virtal abstract...
Du meinst wohl "virtual". Ich rede jedenfalls über so etwas :

Delphi-Quellcode:
type
  TKlasse1 = class
     procedure test; virtual; abstract;
  end;

  TKlasse2 = class (TKlasse1)
     procedure test;
  end;

var
  Klasse1 : TKlasse1;
  Klasse2 : TKlasse2;
ABSTRACT alleine geht überhaupt nicht !


Zitat:
..und da gibt es einen Compiler-Fehler wenn nicht deklariert wurde
Nein, aber wenn es fehlerhaft implementiert ist, also :

Delphi-Quellcode:
type
  TKlasse1 = class
     procedure test; virtual; abstract;
  end;

var
  Klasse1 : TKlasse1;

procedure TKlasse1.UndeklarierteImplementierung;
begin
end;
aber nicht deklariert ist (in der Klassen-Definition), dann ist die Prozedur erstens "unknown identifier" und zusätzlich kommt noch "Ungenügende Forward- oder External-Deklaration". Ist die Prozedur deklariert mit ABSTRACT, dann reicht das. Mehr geht nicht mal (insbesondere keine konkrete Implementierung). Dann kommt nämlich hier :

Delphi-Quellcode:
procedure TKlasse1.test;
begin
  ShowMessage('');
end;
dieser Compilerfehler :
Zitat:
[Fehler] TestUnit.pas(45): Definition für abstrakte Methode 'test' nicht erlaubt
In obigem Fall muss/darf die procedure TKlasse1.Test; nicht implementiert werden, man kann im Programm trotzdem auf diese Prozedur zugreifen und produziert damit erst zur Laufzeit einen Fehler. Trotz des Fehlers lässt sich eine EXE erstellen, die lauffähig ist und eben Fehlermeldungen produziert. So richtig nach dem Motto : "es compiliert, wir können ausliefern".
Gruß
Hansa
  Mit Zitat antworten Zitat