E2266 published 部にはオーバーロードしたメソッド群のうち 1 つしか指定できません (Delphi)

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

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

手続きに対して生成される RTTI には名前しか含まれないため,公開できるのは,オーバーロード関数のセット内の 1 つだけです。


(*$M+*)
(*$APPTYPE CONSOLE*)
program Produce;
type
  Base = class
  published
    procedure p1(a : integer); overload;
    procedure p1(a : boolean); overload;
  end;

  Extended = class (Base)
    procedure e1(a : integer); overload;
    procedure e1(a : boolean); overload;
  end;

  procedure Base.p1(a : integer);
  begin
  end;

  procedure Base.p1(a : boolean);
  begin
  end;

  procedure Extended.e1(a : integer);
  begin
  end;

  procedure Extended.e1(a : boolean);
  begin
  end;

end.


{ この例では 2 つのオーバーロード関数 p1 が両方とも published 部に定義されているが,これは許されない。

また,$M+ が使用されているため Extended クラスは published の可視性から開始される。これにより,このクラスにエラーが発生する }


(*$M+*)
(*$APPTYPE CONSOLE*)
program Solve;
type
  Base = class
  public
    procedure p1(a : integer); overload;
  published
    procedure p1(a : boolean); overload;
  end;

  Extended = class (Base)
  public
    procedure e1(a : integer); overload;
    procedure e1(a : boolean); overload;
  end;

  procedure Base.p1(a : integer);
  begin
  end;

  procedure Base.p1(a : boolean);
  begin
  end;

  procedure Extended.e1(a : integer);
  begin
  end;

  procedure Extended.e1(a : boolean);
  begin
  end;

end.


{ この解決策は,オーバーロード関数のセットのメンバーを 2 つ以上 published 部に定義しないこと。このためには,可視性を public,protected,または private のいずれか適切なものに変えればよい }