E2154 '%s' 型は終了処理が必要です - 構造体の可変部に置くことは許されません (Delphi)

提供: RAD Studio
移動先: 案内検索

エラーと警告のメッセージ(Delphi) への移動

現在所有しているリソースを解放して正しい終了処理をしなければならないという内部的な理由から,いくつかの特定の型はコンパイラによって特別に扱われます。レコードの可変部に実行時に何が格納されるかはコンパイラには決定できないため,このような特別な型に対する終了処理が正しく行われることを保証することができなくなります。


program Produce;

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

begin
end.

{ 文字列はリソースを正しく解放するためにコンパイラによる特殊な処理を必要とする型の 1 つである。したがって,バリアント部に string を使用するのは違法である }


program Solve;

  type
    Data = record
      str : String;
    end;

begin
end.

{ エラーを起こしたすべての宣言をバリアント部から削除するのが 1 つの解決方法である。そのほか,ポインタ型 (たとえば ^string) を使ってメモリを自分で管理する解決方法もある }