Delphi Error – E2154 Type ‘%s’ needs finalization – not allowed in variant record

Delphi Compiler Error

E2154 Type ‘%s’ needs finalization – not allowed in variant record

Reason for the Error & Solution

Certain types are treated specially by the compiler on an internal basis in that they must be correctly finalized to release any resources that they might currently own. Because the compiler cannot determine what type is actually stored in a record’s variant section at run time, it is not possible to guarantee that these special data types are correctly finalized.

program Produce;

  type
    Data = record
      case kind:Char of
      'A': (str : String);
    end;

begin
end.

String is one of those types which requires special treatment by the compiler to correctly release the resources. As such, it is illegal to have a String in a variant section.

program Solve;

  type
    Data = record
      str : String;
    end;

begin
end.

One solution to this error is to move all offending declarations out of the variant section. Another solution would be to use pointer types (^String, for example) and manage the memory by yourself.

Share:

Leave A Reply

Your email address will not be published. Required fields are marked *

You May Also Like

Delphi Compiler Error E2313 Attribute – Known attribute cannot specify properties Reason for the Error & Solution No further information...
Delphi Compiler Error E2379 Virtual methods not allowed in record types Reason for the Error & Solution No further information...
Rodrigo , one of the long time Delphi Developer has been working on one of his personal project “Delphi IDE...