我目前无法解决这些错误,似乎无法解决这些问题,我已将错误附加到我的错误以及代码中,谢谢。
错误:
i386免费Pascal编译器版本2.6.4 [2014/02/26]版权所有(c) 1993至2014年由Florian Klaempfl和其他目标操作系统:Darwin for i386 编译BasicReadWrite.pas BasicReadWrite.pas(22,30)错误: 不兼容的类型:得到“personArray”预期“LongInt” BasicReadWrite.pas(25,8)错误:没有可用的默认属性 BasicReadWrite.pas(25,8)致命:语法错误,“;”预期但“[” 发现致命:编译中止错误:/ usr / local / bin / ppc386返回 错误exitcode(如果您没有指定源文件,则为正常) 编译)
program BasicReadWrite;
type
Person = record
name: String;
age: String; // Should this be an integer? Why/Why not?
end;
personArray = array of Person;
procedure WriteLinesToFile(var myFile: TextFile; const pe: Person);
begin
WriteLn(myFile, pe.age);
WriteLn(myFile, pe.name);
end;
procedure PrintRecords(const ArrayOfPersons: personArray; count: Integer);
var
p: Person;
begin
setLength(p, ArrayOfPersons);
for count:= 0 to high(ArrayOfPersons) do
begin
p[count] := WriteLinesToFile();
end;
end;
procedure ReadLinesFromFile(var myFile: TextFile);
var
p: Person;
number: Integer;
ArrayOfPersons: personArray;
begin
for number:= 0 to 20 do
begin
PrintRecords([number]);
end;
end;
procedure Main();
var
myFile: TextFile;
begin
AssignFile(myFile, 'mytestfile.dat');
ReWrite(myFile); // Use ReWrite to open a file for writing
WriteLinesToFile(myFile);
Close(myFile); // We need to close the file and re-open it, as Pascal
// will not let you Read and write from a file at the same time.
AssignFile(myFile, 'mytestfile.dat');
Reset(myFile); // Open the file for reading.
ReadLinesFromFile(myFile);
Close(myFile);
end;
begin
Main();
end.
答案 0 :(得分:3)
通常第一个错误是首先关注的错误。以下错误可能只是第一个错误的结果。我将帮助您开始解决第一个错误,但剩下的就让您解决了。您可能想与导师讨论错误。
所以,首先关注
BasicReadWrite.pas(22,30)错误:不兼容的类型:得到" personArray" 预期" LongInt"
第22行在
procedure PrintRecords(const ArrayOfPersons: personArray; count: Integer);
var
p: Person;
begin
setLength(p, ArrayOfPersons); // line 22
该行是错误的,因为:
p
是Person
类型记录。您无法设置record
。SetLength()
的第二个参数需要是integer
。 ArrayOfPersons
不是整数。我没有理由在该程序中设定任何长度。
答案 1 :(得分:0)
如果你需要一些解释,当你宣布:
personArray = array of Person;
这意味着personArray是一个动态数组。首先,您需要在使用前指定此动态数组的长度,例如:
setlength(personArray,20);
其中20是要存储在personArray中的索引量(不要忘记第一个索引是0!)。 e.g:
personArray[0].name:= 'John';
age:String; //这应该是一个整数吗?为什么/为什么不呢?
肯定是的,年龄应该是一个整数。您可以在String中存储年龄,但是整数占用的内存较少,您可以对整数使用数学运算(如果需要添加或减去年龄,该怎么办?您不能使用字符串进行数学运算)。只有在需要存储字母数字数据时才应使用字符串。
祝你好运!