E2211 '%s' の宣言が interface '%s' での宣言と異なっています (Delphi)

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

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

インターフェースを実装するクラス内のメソッドの宣言が,インターフェース内での定義と異なっています。原因としては,パラメータ型または戻り値が異なっている,クラス内のメソッドがメッセージメソッドである,クラス内の識別子がフィールドである,あるいはクラス内の識別子がインターフェース内の定義と一致しないプロパティであることが考えられます。


program Produce;

  type
    IBaseIntf = interface
      procedure p0(var x : Shortint);
      procedure p1(var x : Integer);
      procedure p2(var x : Integer);
    end;

    TBaseClass = class (TInterfacedObject)
      procedure p1(var x : Integer); message 151;
    end;

    TExtClass = class (TBaseClass, IBaseIntf)
      p2 : Integer;
      procedure p0(var x : Integer);
      procedure p1(var x : Integer); override;
    end;

  procedure TBaseClass.p1(var x : Integer);
  begin
  end;

  procedure TExtClass.p0(var x : Integer);
  begin
  end;

  procedure TExtClass.p1(var x : Integer);
  begin
  end;

begin
end.

{ この例のように,一般にこのタイプのエラーは見つけやすい。ただし,p1 を見ればわかるように,状況はやや微妙である。p1 は継承したクラスの手続きをオーバーライドしているので,p1 は基本クラスで定義された可視性も継承することになる }


program Solve;

  type
    IBaseIntf = interface
      procedure p0(var x : Shortint);
      procedure p1(var x : Integer);
      procedure p2(var x : Integer);
    end;

    TBaseClass = class (TInterfacedObject)
      procedure p1(var x : Integer); message 151;
    end;

    TExtClass = class (TBaseClass, IBaseIntf)
      p2 : Integer;

      procedure IBaseIntf.p1 = p3;
      procedure IBaseIntf.p2 = p4;

      procedure p0(var x : Shortint);
      procedure p1(var x : Integer); override;
      procedure p3(var x : Integer);
      procedure p4(var x : Integer);
    end;

  procedure TBaseClass.p1(var x : Integer);
  begin
  end;

  procedure TExtClass.p0(var x : Shortint);
  begin
  end;

  procedure TExtClass.p1(var x : Integer);
  begin
  end;

  procedure TExtClass.p3(var x : Integer);
  begin
  end;

  procedure TExtClass.p4(var x : Integer);
  begin
  end;

begin
end.

{ この問題を解決するアプローチの 1 つは,次の例のように,問題のありそうな識別子それぞれに message 解決節を使用すること。もう 1 つのアプローチは,設計には熟慮が必要となるが,コンパイルの前にクラス識別子がインターフェース識別子と互換となるようにしておくこと }