W1029 L'élément dupliqué %s '%s' avec paramètres identiques sera inaccessible au C++ (Delphi)

De RAD Studio
Aller à : navigation, rechercher

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é.