当我编译以下代码时,会出现错误。我不明白其中的一些。
码
program Lasagna;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils
{ you can add units after this };
{$R *.res}
type
TVehicle = record
kindOfVehicle : String[30];
numberOfWheels : Integer;
horsePower : Real;
end;
var
F: file of TVehicle;
Vehicle : Array [1..3] of TVehicle;
index : Integer;
begin
writeln('A RECORD OF DIFFERENT KIND OF VEHICLES.');
writeln('---------------------------------------');
writeln;
AssignFile(F,'C:/Users/W/Desktop/CarRecord.dat');
writeln('Searching for file.');
if FileExists('C:/Users/W/Desktop/CarRecord.dat') then
begin
writeln('File found. Opening file.');
Rewrite(F);
writeln('File ready.');
writeln;
writeln;
for index:=0 to 3 do
begin
writeln('Enter the following details for vehicle no. ',index);
write('Kind of Vehicle: ');
readln(Vehicle[index].kindOfVehicle);
write(F,Vehicle[index].kindOfVehicle);//line 45: this is a string so why do I get an error?**
{Do NOT use writeln() when writing to random access files.}
write('Number of Wheels: ');
readln(Vehicle[index].numberOfWheels);
write(F,IntToStr(Vehicle[index].numberOfWheels));//line 51: The int is converted to string, so i shouldn't get an error?
write('Horse Power of Vehicle: ');
readln(Vehicle[index].horsePower);
write(F, RealToStr(Vehicle[index].horsePower));//line 55:
end;
writeln('Done. Closing File.');
CloseFile(F);
end
else
Rewrite(F);
CloseFile(F);
writeln('File Not Found.');
Writeln('Press ANY key to close the program.');
Readln;
end.误差
编译Lasagna.lpr
Lasagna.lpr(45,49)错误:不兼容类型: got "ShortString“预期的"TVehicle”
Lasagna.lpr(51,60)错误:不兼容类型: got "AnsiString“预期的"TVehicle”
Lasagna.lpr(55,59)错误:不兼容类型: got "AnsiString“预期"TVehicle”
Lasagna.lpr(70)致命:有3个错误编译模块,停止
发布于 2011-08-28 20:36:20
在第21行中,您将F声明为“TVehicle文件”。因此,您应该向其写入TVehicle数据,而不是字符串。
发布于 2011-08-28 20:34:24
在这3种情况下,您尝试将字符串写入F中,而F被声明为TVehicle文件,所以编译器是正确的。
要解决这个问题,您应该将每个字段读入正确类型的变量,用这些变量填充TVehicle类型变量,或者直接使用TVehicle结构的字段并将该变量写入文件。一些类似的东西(我的Pascal有点生疏了,很可能这不会在不接触它的情况下编译):
var intermediateVehicle : TVehicle;
....
write('Kind of Vehicle: ');
readln(intermediateVehicle.kindOfVehicle);
write('Number of Wheels: ');
readln(intermediateVehicle.numberOfWheels);
write('Horse Power of Vehicle: ');
readln(intermediateVehicle.horsePower);
write(F,intermediateVehicle);当然,错误检查还需要添加.
https://stackoverflow.com/questions/7223711
复制相似问题