如何在Delphi中使用类转换解决不兼容类型错误(E2010)?

时间:2013-06-12 23:13:16

标签: delphi class types casting

我有这样的代码:

TBase = class

end;

TClassA = class(TBase)

end;

TClassB = class(TBase)

end;

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

procedure MyProcedure(item: TBase);

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

我不明白我的错误。 感谢

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

2 个答案:

答案 0 :(得分:4)

我能看到你收到错误的唯一方法就是如果你这样叫MyProcedure()

MyProcedure(TClassA);

当你应该这样称呼它时:

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

换句话说,它期望一个指向对象实例的指针,但你传递的是一个类类型。

答案 1 :(得分:2)

您的代码没有任何问题。鉴于您的课程声明和您的程序,您可以

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

它会编译得很好。显然,您传递给MyProcedure 的内容实际上并非 TBaseTClassA或{{1} }。