E2266 published 部にはオーバーロードしたメソッド群のうち 1 つしか指定できません (Delphi)
エラーと警告のメッセージ(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 のいずれか適切なものに変えればよい }