E2154 Typ '%s' benötigt Finalisierung - nicht im Variant-Record erlaubt (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Delphi)

Bestimmte Typen werden vom Compiler intern auf besondere Weise behandelt: Sie müssen zuerst ordnungsgemäß abgeschlossen werden, damit gegebenenfalls die gesamten von ihnen zurzeit belegten Ressourcen freigegeben werden. Da der Compiler nicht feststellen kann, welcher Typ während der Programmausführung tatsächlich im Variantenabschnitt eines Datensatzes gespeichert ist, kann nicht garantiert werden, dass diese speziellen Datentypen ordnungsgemäß abgeschlossen werden.


program Produce;

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

begin
end.

String ist einer der Typen, die eine besondere Behandlung vom Compiler erfordern, um die belegten Ressourcen ordnungsgemäß freigeben zu können. Aus diesem Grunde ist die Benutzung von String in einem Variant-Abschnitt nicht zulässig.


program Solve;

  type
    Data = record
      str : String;
    end;

begin
end.

Eine Lösung für diesen Fehler ist, alle betreffenden Deklarationen aus dem Variant-Abschnitt zu entfernen. Eine andere Möglichkeit wäre, Zeigertypen zu verwenden (beispielsweise ^String) und den Speicher selbst zu verwalten.