W1029 パラメータが等しい複数の %s は C++ から参照できません : %s (Delphi)
エラーと警告のメッセージ(Delphi) への移動
オブジェクトファイルの作成において,同じパラメータリストを持つ複数の異なる名前のコンストラクタまたはデストラクタが見つかりました。コードを .HPP ファイルに変換する場合,名前はクラス名に変換されるため,これらのコンストラクタおよびデストラクタにアクセスできなくなります。C++ ではコンストラクタおよびデストラクタはクラスごとに 1 つしか定義できないからです。C++ ではこのような重複した宣言は同じ関数として扱われます。
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.
{ この例に示すように,2 つのコンストラクタが同じ宣言を持つ。したがっていずれかの -j オプションでファイルがコンパイルされるとこの警告が生成される }
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.
{ 簡単な解決策としては,たとえばパラメータを追加していずれかのコンストラクタの宣言を変更する方法がある。上の例では,デフォルトパラメータを Ctor1 に追加している。この解決策には,Ctor1 を使用する Delphi コードを変更する必要がないという利点がある。一方,C++ のコードでは追加のパラメータを指定して,どのコンストラクタを使用するかをコンパイラに判断させなければならない }