xe2 full berlin delphi delphi-xe2

full - delphi berlin



Error del compilador al usar genéricos y declaración directa en Delphi XE2 (1)

¿Es posible resolver el problema ajustando las opciones del compilador?

No , no puedes arreglar el error ajustando, es un error (muy específico) en el compilador.

[¿Puede alguien decirme] si este problema se repite en otra persona?

Puedo reproducir el código, pero solo en la actualización XE2 4.

No pude verificarlo en XE3 (no tengo esa versión). Se arregla en XE4 (según los comentarios).

Entonces, la única forma de que el código funcione es:

a. eliminar la declaración adelante innecesaria.
segundo. usa una versión diferente de Delphi.

Comencé proyecto en Delphi 2010, luego migré a XE y ahora trato de migrar a XE2. Después de compilar en XE2 (Actualización 4 Hotfix 1), las pruebas unitarias comenzaron a fallar con AV. Después de algunas depuraciones, quedó claro que el siguiente código no se compiló correctamente:

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.

Resultados del programa:

TEntityBase: 12 bytes TMyEntity1: 12 bytes <-- Must be 16 bytes! EAssertionFailed: Assertion failure (ForwardDeclaration.dpr, line 41)

¿Es posible resolver el problema ajustando las opciones del compilador?

Si este problema se repite en otra persona?

PS QC107110