我有这样的代码:
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。
答案 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
的内容实际上并非 TBase
,TClassA
或{{1} }。