2013-06-12 59 views
-5

我有这样的代码:在Delphi中如何用类转换解决不兼容的类型错误(E2010)?

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。

+3

“TClassA类”告诉我你还有一些我们看不到的代码。你可以向你的代码展示你实际调用的地方吗? –

+3

您发布的代码中没有“类别投射”(或任何其他“投射”发生)。如果您在调用'MyProcedure'时遇到问题,则应该**发布调用'MyProcedure'的代码**。 –

+3

如果您要显示一个完整的程序来说明错误,那将是微不足道的。我们可以立即给你一个明确的答案。相反,您省略了最重要的代码行。为什么?为什么让我们很难?展示一个完整的程序,15行,说明问题。 –

回答

2

你的代码没有问题。鉴于你的类声明和你的程序,你可以做

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

它会编译得很好。显然,你做什么传递到MyProcedure实际上不是 a TBase,TClassATClassB

+0

相反,它是'TClassA类' –

4

我可以看到你得到的是错误的唯一方法是,如果你在呼唤MyProcedure()这样的:

MyProcedure(TClassA); 

当你要调用它像这样代替:

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

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

+0

在Delphi 2009中,我得到的错误信息是'E2010不兼容类型:'TBase'和'Class reference''。也许在Delphi 2010中它已经发生了变化。 –

+0

错误的文字说什么并不重要。原因是一样的 - 过程期望一个对象指针作为输入,但调用代码不传入对象指针。 –

+0

当您告诉:ca:TClassA时,我用对象调用MyProcedure; MyProcedure(CA);但我得到的错误。使用Delphi XE3。 – Martin

相关问题