首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FreePascal:单元转换的问题。

FreePascal:单元转换的问题。
EN

Stack Overflow用户
提问于 2011-08-28 20:30:39
回答 2查看 207关注 0票数 0

当我编译以下代码时,会出现错误。我不明白其中的一些。

代码语言:javascript
复制
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个错误编译模块,停止

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-28 20:36:20

在第21行中,您将F声明为“TVehicle文件”。因此,您应该向其写入TVehicle数据,而不是字符串。

票数 1
EN

Stack Overflow用户

发布于 2011-08-28 20:34:24

在这3种情况下,您尝试将字符串写入F中,而F被声明为TVehicle文件,所以编译器是正确的。

要解决这个问题,您应该将每个字段读入正确类型的变量,用这些变量填充TVehicle类型变量,或者直接使用TVehicle结构的字段并将该变量写入文件。一些类似的东西(我的Pascal有点生疏了,很可能这不会在不接触它的情况下编译):

代码语言:javascript
复制
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);

当然,错误检查还需要添加.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7223711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档