如果我尝试编译以下代码,我收到错误消息“E2010不兼容类型:'扩展'和'TMyRec'”为最后一行(E:= R):
type
TMyRec = record
class operator Implicit(Rec: TMyRec) : Integer;
class operator Implicit(Rec: TMyRec) : Extended;
end;
class operator TMyRec.Implicit(Rec: TMyRec) : Integer;
begin
Result := 1;
end;
class operator TMyRec.Implicit(Rec: TMyRec) : Extended;
begin
Result := 1;
end;
var
R : TMyRec;
B : Byte;
E : Extended;
begin
B := R; //this is OK
E := R; //E2010 Incompatible types: 'Extended' and 'TMyRec'
end.
我让一位朋友尝试在XE中编译它 - 编译成功了。这是BDS2006中的一个错误吗?有没有办法解决这个问题?
答案 0 :(得分:0)
这确实是一个编译器缺陷。解决此问题的唯一方法是升级到解决缺陷的编译器版本。如果你不能这样做,你只需要以不同的方式编写代码。
FWIW,在我看来,使用Extended
总是一个错误。此类型是非标准的,仅存在于x86上。在将来某个时候,如果您转到x64,您会发现Extended
已映射到Double
。此外,类型的对齐会导致内存访问性能下降,而将数据存储为Extended
而不是Double
的程序往往会明显变慢。