x1020: Instanz von '%s' mit abstrakter Methode '%s.%s' wird konstruiert (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Delphi)


Der zu compilierende Quelltext konstruiert Instanzen von Klassen, die abstrakte Methoden enthalten.


program Produce;
(*$WARNINGS ON*)
(*$HINTS ON*)

  type
    Base = class
      procedure Abstraction; virtual; abstract;
    end;

  var
    b : Base;

begin
  b := Base.Create;
end.

Eine abstrakte Prozedur existiert nicht, so dass es gefährlich wird, Instanzen einer Klasse zu erstellen, die abstrakte Prozeduren enthält. In diesem Fall ist die Erstellung von b die Ursache für die Warnung. Jeder Aufruf von Abstraction während der hier erstellten Instanz von b würde zu einem Laufzeitfehler führen. Es wird ein Hinweis ausgegeben, dass der zu 'b' zugewiesene Wert niemals benutzt wird.


program Solve;
(*$WARNINGS ON*)
(*$HINTS ON*)

  type
    Base = class
      procedure Abstraction; virtual;
    end;

  var
    b : Base;

  procedure Base.Abstraction;
  begin
  end;

begin
  b := Base.Create;
end.

Eine Lösung dieses Problems ist die Entfernung der abstrakten Anweisung aus der Deklaration der Prozedur, wie hier gezeigt wird. Eine andere Möglichkeit wäre, eine Klasse von Base abzuleiten und dann eine konkrete Version von Abstraction bereitzustellen. Es wird ein Hinweis ausgegeben, dass der zu 'b' zugewiesene Wert niemals benutzt wird.