E2136 抽象メソッド '%s' には定義があってはなりません (Delphi)

提供: RAD Studio
移動先: 案内検索

エラーと警告のメッセージ(Delphi) への移動

<name> を abstract として宣言しましたが,コンパイラはソースファイルの中でそのメソッドの定義を見つけました。abstract 宣言に定義を指定するのは違法です。


program Produce;

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

    procedure Base.Foundation;
    begin
    end;

begin
end.

{ 抽象メソッドは定義できない。このプログラムをコンパイルすると,Base.Foundation のところでエラーが表示される }


program Solve;

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

    Derived = class (Base)
      procedure Foundation; override;
    end;

    procedure Derived.Foundation;
    begin
    end;

begin
end.

{ このエラーを解決するには 2 つの手順が必要である。最初に,基本クラスで宣言した抽象手続きの定義を削除しなければならない。次に,基本クラスを拡張し,この抽象手続きを拡張機能の中で override として宣言した後,新しく宣言した手続きの定義を指定する }