4

コンストラクターのオプションのパラメーターを省略すると、次のプログラムで「互換性のない型」エラー (Delphi XE3) が発生する理由を説明してください (詳細については、コードの下部にあるコメントを参照してください)。

program Test;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Classes;

type
  BaseClass = class(TObject);

  ChildClass = class(BaseClass);

  GenericBaseClass<T> = class
  public
    constructor Create(Fixed: Integer);
  end;

  GenericClass<T: BaseClass> = class(GenericBaseClass<T>)
  public
    type
      TMyProc = procedure (DataObject: T) of object;
  public
    constructor Create(Fixed: String; Optional: TMyProc = nil);
  end;

constructor GenericClass<T>.Create(Fixed: String; Optional: TMyProc);
begin
  inherited Create(12);
end;

constructor GenericBaseClass<T>.Create(Fixed: Integer);
begin
  inherited Create();
end;

var
  Gc: GenericClass<ChildClass>;

begin
  // this call is okay
  Gc := GenericClass<ChildClass>.Create('', nil);
  // this call fails: E2010 Incompatible types: 'ChildClass' and 'T'
  Gc := GenericClass<ChildClass>.Create('');
end.
4

1 に答える 1

0

同じ名前でパラメーターが異なる複数のコンストラクターがあるため、コンストラクターにreintroduceorを追加します。overloadGenericClass

于 2013-05-28T14:40:05.343 に答える