-5

我有这样的代码:

TBase = class

end;

TClassA = class(TBase)

end;

TClassB = class(TBase)

end;

现在我需要一个带参数的过程,这个过程必须接受 TBase 对象和所有 TBase 子对象(TClassA 和 TClassB),我尝试了这个:

procedure MyProcedure(item: TBase);

但是,如果我尝试传递 TClassA 或 TClassB,则会收到错误消息:“E2010 不兼容的类型:'TBase' 和 'class of TClassA'”。

我不明白我的错误。谢谢

注意:在发布之前我试图找到一个类似的问题但没有成功,如果你知道,请给我链接 anwser。

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);

它会编译得很好。显然,您传递给的实际上不是a ,或a 。MyProcedure TBaseTClassATClassB

于 2013-06-12T23:15:44.760 回答