W1029 %s '%s' doppelt mit identischen Parametern; Zugriff von C++ nicht möglich (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Delphi)

Es wird eine Objektdatei erzeugt, und zwei unterschiedlich benannte Konstruktoren oder Destruktoren mit identischen Parameterlisten wurden erzeugt. Auf sie kann bei der Umsetzung des Quelltext in eine HPP-Datei nicht zugegriffen werden, weil sowohl die Konstruktor- als auch die Destruktor-Namen in den Klassennamen konvertiert werden. In C++ erscheinen diese doppelt vorhandenen Deklarationen als ein und dieselbe Funktion.


unit Produce;
interface
  type
    Base = class
      constructor ctor0(a, b, c : integer);
      constructor ctor1(a, b, c : integer);
    end;

implementation
constructor Base.ctor0(a, b, c : integer);
begin
end;

constructor Base.ctor1(a, b, c : integer);
begin
end;

begin
end.


In diesem Beispiel weisen die beiden Konstruktoren die gleiche Signatur auf. Beim Compilieren der Datei mit einer der -j-Optionen wird eine Warnung generiert.


unit Solve;
interface
  type
    Base = class
      constructor ctor0(a, b, c : integer);
      constructor ctor1(a, b, c : integer; dummy : integer = 0);
    end;

implementation
constructor Base.ctor0(a, b, c : integer);
begin
end;

constructor Base.ctor1(a, b, c : integer; dummy : integer);
begin
end;

begin
end.


Eine einfache Lösung besteht darin, die Signatur eines der Konstruktoren zu ändern, beispielsweise durch Hinzufügen eines zusätzlichen Parameters. Im Beispiel wurde ein Standardparameter zu ctor1 hinzugefügt. Diese Lösung hat den Vorteil, dass vorhandener Delphi-Quelltext, der Ctor1 verwendet, nicht geändert zu werden muss. Andererseits muss im C++ Quelltext ein zusätzlicher Parameter angegeben werden, der dem Compiler mitteilt, welcher Konstruktor verwendet werden soll.