Delphi 2010'da projeye başladım, sonra XE'ye geçtim ve şimdi XE2'ye geçmeye çalışıyorum. XE2 (Güncelleme 4 Düzeltme 1) 'da derlendikten sonra, AV ile birim testleri başarısız oldu.Delphi XE2'de jenerik ve ileri bildirim kullanırken derleyici hatası
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.
Program çıktıları:
TEntityBase: 12 bytes
TMyEntity1: 12 bytes <-- Must be 16 bytes!
EAssertionFailed: Assertion failure (ForwardDeclaration.dpr, line 41)
o akort derleyici seçenekleri ile sorunu çözmek mümkün mü bazı ayıklama sonra, aşağıdaki kodu doğru derlenmiş olmadığını belli oldu?
Bu sorun başka biri tarafından tekrarlanıyor olsun?
P.S. QC107110
Bunu QualityCentral'a gönderin. Ayrıca, ileriye dönük beyanlar nereye gelir. Bu tür tek beyanname kullanılmamaktadır. –
Kod en basitleştirilmiş, böylece derleyici hatası yeniden üretildi. Gerçek bir proje ileri beyannamesi kullanılır. Bu sorun sadece bana değil, QC'ye yazarım. – Chaa
Tamam. Hatayı gönderdiğinizde, daha da azaltmalısınız. İleriye dönük beyannameye uygun değil gibi görünüyor. Basitçe InstanceSize ile bir kod sorunu. Destek sözleşmeniz varsa, bir destek sorununu açabilirsiniz, ancak bunu yapmak bile bir yanıt alacağınız anlamına gelmez. –