记录需要最终确定 - 文件中不允许
record needs finalization - not allowed in file
我是 delphi 的初学者,我遇到了最终化错误 e2155。我正在使用 RAD 10 并尝试 运行 我在移动设备上的程序。它在我的 windows 机器上运行良好,但是当我更改为 Android 或 IOS 时,它会给我最终化错误。
代码:
type
TRaumparameter = record
ID : string;
Länge: string;
Breite: string;
Höhe: string;
Fläche: string;
Raumvolumen: string;
Wände: string;
Decke: string;
Boden: string;
Baujahr: string;
Heizlast: string;
end;
var Aufstellraum: Traumparameter;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
{$R *.iPad.fmx IOS}
procedure TForm1.speichernClick(Sender: TObject);
var F: File of Traumparameter;
begin
Aufstellraum.Länge:=form2.Länge.Text;
Aufstellraum.Breite:=form2.Breite.Text;
Aufstellraum.Höhe:=form2.Höhe.Text;
Aufstellraum.Fläche:=form2.Fläche.Text;
Aufstellraum.Raumvolumen:=form2.ErgebnisRaumVol.Text;
Aufstellraum.Wände:=form2.Wände.Text;
Aufstellraum.Decke:=form2.Decke.Text;
Aufstellraum.Baujahr:=form2.Baujahr.Selected.Text;
Aufstellraum.Heizlast:=form2.Heizlast.Text;
try
AssignFile(F,'D:\test.txt');
ReWrite(F);
Write(F,Aufstellraum);
finally
CloseFile(F);
end;
end;
我已经尝试用 [] 限制字符串的长度,但它告诉我:';'预期但找到“[”。
希望我能得到一些答案,因为我花了一段时间没有成功。提前致谢!!
当您尝试写入包含 String
类型的记录文件时,编译器不允许:
E2155 Type '%s' needs finalization - not allowed in file type (Delphi)
String is one of those data types which need finalization, and as such they cannot be stored in a File type
无论如何使用二进制文件类型写入带有 String
字段的记录是没有意义的,因为您将写入地址而不是文本(字符串是引用类型)。
当您声明具有专用长度的字符串时,它们被称为 ShortString(值类型)。 ShortString
虽然移动编译器不支持。
我建议您使用其他技术来存储文本。例如,查看如何使用 json
将记录转换为文本。
就去做吧:
TRaumparameter = record
ID : string[255];
Länge: string[255];
Breite: string[255];
Höhe: string[255];
Fläche: string[255];
Raumvolumen: string[255];
Wände: string[255];
Decke: string[255];
Boden: string[255];
Baujahr: string[255];
Heizlast: string[255];
end;
我是 delphi 的初学者,我遇到了最终化错误 e2155。我正在使用 RAD 10 并尝试 运行 我在移动设备上的程序。它在我的 windows 机器上运行良好,但是当我更改为 Android 或 IOS 时,它会给我最终化错误。
代码:
type
TRaumparameter = record
ID : string;
Länge: string;
Breite: string;
Höhe: string;
Fläche: string;
Raumvolumen: string;
Wände: string;
Decke: string;
Boden: string;
Baujahr: string;
Heizlast: string;
end;
var Aufstellraum: Traumparameter;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
{$R *.iPad.fmx IOS}
procedure TForm1.speichernClick(Sender: TObject);
var F: File of Traumparameter;
begin
Aufstellraum.Länge:=form2.Länge.Text;
Aufstellraum.Breite:=form2.Breite.Text;
Aufstellraum.Höhe:=form2.Höhe.Text;
Aufstellraum.Fläche:=form2.Fläche.Text;
Aufstellraum.Raumvolumen:=form2.ErgebnisRaumVol.Text;
Aufstellraum.Wände:=form2.Wände.Text;
Aufstellraum.Decke:=form2.Decke.Text;
Aufstellraum.Baujahr:=form2.Baujahr.Selected.Text;
Aufstellraum.Heizlast:=form2.Heizlast.Text;
try
AssignFile(F,'D:\test.txt');
ReWrite(F);
Write(F,Aufstellraum);
finally
CloseFile(F);
end;
end;
我已经尝试用 [] 限制字符串的长度,但它告诉我:';'预期但找到“[”。 希望我能得到一些答案,因为我花了一段时间没有成功。提前致谢!!
当您尝试写入包含 String
类型的记录文件时,编译器不允许:
E2155 Type '%s' needs finalization - not allowed in file type (Delphi)
String is one of those data types which need finalization, and as such they cannot be stored in a File type
无论如何使用二进制文件类型写入带有 String
字段的记录是没有意义的,因为您将写入地址而不是文本(字符串是引用类型)。
当您声明具有专用长度的字符串时,它们被称为 ShortString(值类型)。 ShortString
虽然移动编译器不支持。
我建议您使用其他技术来存储文本。例如,查看如何使用 json
将记录转换为文本。
就去做吧:
TRaumparameter = record
ID : string[255];
Länge: string[255];
Breite: string[255];
Höhe: string[255];
Fläche: string[255];
Raumvolumen: string[255];
Wände: string[255];
Decke: string[255];
Boden: string[255];
Baujahr: string[255];
Heizlast: string[255];
end;