W1029 %s '%s' doppelt mit identischen Parametern; Zugriff von C++ nicht möglich (Delphi)
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.