Delphi Compiler Error
E2266 Only one of a set of overloaded methods can be published
Reason for the Error & Solution
Only one member of a set of overloaded functions may be published because the RTTI generated for procedures only contains the name.
(*$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.
In the example shown here, both overloaded p1 functions are contained in a published section, which is not allowed.
Further, since the $M+ state is used, the Extended class starts with published visibility, thus the error will also appear for this class also.
(*$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.
The solution here is to ensure that no more than one member of a set of overloaded function appears in a published section. The easiest way to achieve this is to change the visibility to public, protected or private; whichever is most appropriate.