在Delphi XE2中使用泛型和转发声明时的编译器错误
发布时间:2020-12-15 05:25:36 所属栏目:大数据 来源:网络整理
导读:我开始在Delphi 2010项目,然后迁移到XE,现在我试图迁移到XE2。 在XE2(更新4修补程序1)中编译后,单元测试开始与AV失败。 经过一些调试,很明显,下面的代码没有正确编译: program ForwardDeclaration;{$APPTYPE CONSOLE}uses System.SysUtils;type TEntit
我开始在Delphi 2010项目,然后迁移到XE,现在我试图迁移到XE2。
在XE2(更新4修补程序1)中编译后,单元测试开始与AV失败。 经过一些调试,很明显,下面的代码没有正确编译: program ForwardDeclaration; {$APPTYPE CONSOLE} uses System.SysUtils; type TEntityBase = class(TObject) protected FModel: Integer; public constructor Create(const AModel: Integer); end; TEntity<TKey> = class(TEntityBase) end; TMyEntity2 = class; TMyEntity1 = class(TEntity<Integer>) FData: Integer; end; TMyEntity2 = class(TMyEntity1) end; constructor TEntityBase.Create(const AModel: Integer); begin inherited Create; FModel := AModel; end; var MyEntity: TMyEntity1; begin try Writeln(TEntityBase.ClassName,': ',TEntityBase.InstanceSize,' bytes'); Writeln(TMyEntity1.ClassName,TMyEntity1.InstanceSize,' bytes'); MyEntity := TMyEntity1.Create(100); Assert(MyEntity.FData = 0); except on E: Exception do Writeln(E.ClassName,E.Message); end; end. 程序输出: TEntityBase: 12 bytes TMyEntity1: 12 bytes <-- Must be 16 bytes! EAssertionFailed: Assertion failure (ForwardDeclaration.dpr,line 41) 是否可以通过调整编译器选项来解决问题? 这个问题是否在别人重复? P.S。 解决方法
不,你不能通过调整来修复错误,它是一个(非常具体)编译器中的错误。
我可以重现代码,但只能在XE2更新4。 我不能检查它在XE3(没有那个版本)。 因此,让代码工作的唯一方法是: 一个。删除不需要的前向声明。b。使用不同版本的Delphi。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |