W1029 パラメータが等しい複数の %s は C++ から参照できません : %s (Delphi)

提供: RAD Studio
移動先: 案内検索

エラーと警告のメッセージ(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++ のコードでは追加のパラメータを指定して,どのコンストラクタを使用するかをコンパイラに判断させなければならない }