-5

私はこのようなコードを持っています:

TBase = class

end;

TClassA = class(TBase)

end;

TClassB = class(TBase)

end;

ここで、パラメーターを持つプロシージャが必要です。このプロシージャは、TBase オブジェクトとすべての TBase の子 (TClassA および TClassB) を受け入れる必要があります。これを試してみました。

procedure MyProcedure(item: TBase);

しかし、TClassA または TClassB を渡そうとすると、「E2010 互換性のない型: 'TBase' と 'TClassA のクラス'」というエラーが表示されます。

私は自分のエラーを理解していません。ありがとう

注:投稿する前に、同様の質問を見つけようとしましたが、成功しませんでした。わかっている場合は、回答者にリンクしてください。

4

2 に答える 2

4

そのエラーが発生するのを確認できる唯一の方法は、次のMyProcedure()ように呼び出している場合です。

MyProcedure(TClassA);

代わりに次のように呼び出す必要がある場合:

var
  ca: TClassA;
...
MyProcedure(ca);

つまり、オブジェクト インスタンスへのポインターを期待していますが、代わりにクラス型を渡しています。

于 2013-06-12T23:31:46.727 に答える
2

コードに問題はありません。クラス宣言とプロシージャがあれば、次のことができます。

var
  b: TBase;
  ca: TClassA;
  cb: TClassB;
begin
  MyProcedure(b);
  MyProcedure(ca);
  MyProcedure(cb);

そしてそれはうまくコンパイルされます。どうやら、あなた渡すものMyProcedure は、実際 にはTBaseTClassA、またはではありませんTClassB

于 2013-06-12T23:15:44.760 に答える