W1029 L'élément dupliqué %s '%s' avec paramètres identiques sera inaccessible au C++ (Delphi)
Remonter à Messages d'erreur et d'avertissement (Delphi)
Un fichier objet est en cours de génération et deux constructeurs ou destructeurs ont été créés avec des noms différents alors que leurs listes de paramètres sont identiques. Si le code est converti en fichier HPP, ils seront inaccessibles puisque les noms des constructeurs et des destructeurs sont traduits par le nom de la classe. Dans C++, ces déclarations en double semblent être la même fonction.
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.
Dans cet exemple, les deux constructeurs ont la même signature : quand le fichier est compilé avec une des options -j, un avertissement est généré.
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.
Une solution simple consiste à modifier la signature d'un des constructeurs, par exemple, en ajoutant un paramètre supplémentaire. Dans l'exemple ci-dessus, un paramètre par défaut a été ajouté à ctor1. Cette solution a l'avantage de conserver inchangé le code Delphi qui utilise ctor1. En revanche, le code C++ devra préciser le paramètre supplémentaire pour permettre au compilateur de déterminer quel constructeur est souhaité.