E2266 Nur eine Methode aus einer Gruppe überladener Methoden darf 'published' sein (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Delphi)

Nur ein Element aus einer Gruppe überladener Funktionen kann als published deklariert werden, weil die für Prozeduren generierten Laufzeit-Typinformationen (RTTI) nur den Namen enthalten.


(*$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.


Im hier gezeigten Beispiel sind die beiden überladenen p1-Funktionen in einem als published deklarierten Abschnitt enthalten, was nicht zulässig ist.

Da außerdem der Status $M+ verwendet wird, beginnt die Klasse Extended mit einer als published deklarierten Sichtbarkeit, so dass der Fehler auch bei dieser Klasse auftritt.


(*$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.


Die Lösung in diesem Fall besteht darin, sicherzustellen, dass nicht mehr als ein Element einer Gruppe von überladenen Funktionen in einem als published deklarierten Abschnitt enthalten ist. Am einfachsten erreichen Sie dies, indem Sie die Sichtbarkeit als public, protected oder private deklarieren.