【发布时间】:2012-10-08 20:05:12
【问题描述】:
我有一段简单的代码,它在 Delphi XE2 中编译,但在 XE3 中不编译,我不知道为什么。我已将有问题的代码减少到一点点,并想知道 Delphi 认为它有什么问题。尝试在 Delphi XE 2 中编译包含此单元的项目工作正常,但在 Delphi XE3(试用版)中,它给出“[dcc32 Error] AffineTransform.pas(26): E2382 Cannot call constructors using instance variables”。我在这里知道的唯一“古怪”的事情是使用老式的“对象”类型,其中构造函数与真实对象(基于 TObject 的类实例)中的构造函数并不完全相同。
如果我将这个对象中的“constructor”替换为“procedure”,那么它可以编译,但是为什么会这样,在我的代码中这是一个可以做的改变吗?对功能的影响?
unit AffineTransform;
interface
type
{ Rectangular area. }
TCoordRect = object
public
Left, Top, Right, Bottom: Real;
constructor CreatePos(ALeft, ATop, ARight, ABottom: Real);
procedure Include(AX, AY: Real);
end;
implementation
constructor TCoordRect.CreatePos(ALeft, ATop, ARight, ABottom: Real);
begin
Left := ALeft;
Top := ATop;
Right := ARight;
Bottom := ABottom;
end;
procedure TCoordRect.Include(AX, AY: Real);
begin
CreatePos(AX, AY, AX, AY)
end;
end.
【问题讨论】:
-
为什么要在遗留的 Turbo Pascal 对象上实现构造函数?那应该是一个过程,它应该被称为
Initialize。 -
@LaKraven 没有继承的 Create。这是
object而不是class。 -
没有发现,@DavidHeffernan。干杯!
-
这本来不是我的代码,只是落到我手里的东西,所以不能说作者的初衷。据我所知, Create 和 CreatePos 方法的意图只是初始化结构,所以我猜想调用它们构造函数只是为了让它们在代码中作为初始化方法在视觉上脱颖而出。但是由于我不确定,这基本上就是我在这里要问的,即这里的“构造函数”和“过程”之间是否存在任何功能差异,为什么我不应该只更改术语?另外,好奇,为什么 XE3 给出错误而 XE2 没有?
标签: delphi object constructor