它说
致命:语法错误,预期为OF,但是[找到]变量“ lo”
但是我真的看不出有什么问题。
我试图更改变量名,但似乎不起作用。
procedure reg( index, gen : char;
fname, sname, loginname, passwords, pid : string;
var lo : array [1..26,1..1025] of bucket ;
var main : array[1..1025] of detail);
var
convertedindex, i, j : integer;
found, found2 : boolean;
应该没有错误,但是显示语法错误。
答案 0 :(得分:3)
在声明过程(或函数)参数时,无法定义数组。您需要预先通过执行以下操作来定义数组类型:
program arraydecl;
type
Bucket = integer;
Detail = integer;
type
BucketArray = array [1..26,1..1025] of Bucket;
DetailArray = array[1..1025] of Detail;
procedure reg(index, gen : char; fname, sname, loginname, passwords, pid : string ; var lo : BucketArray; var main : DetailArray);
begin
end;
答案 1 :(得分:2)
该错误消息表明编译器期望使用关键字of
,但是却找到了一个括号[
。
原因是(我猜)在过程声明中,您无法定义数组的边界。例如,您不能说main: array[1..2] of integer
,只能说main: array of integer
。
您可以尝试定义数组类型,然后将该类型用作过程参数:
type TwoInts = array[1..2] of integer;
procedure PrintTwoInts(ti: TwoInts)
begin
WriteLn(ti[1], ti[2])
end;
我很久没有用Pascal编程了,所以以上内容可能有效,也可能无效。我不记得ti
是按值传递还是按引用传递,并且过程内的数组索引是否总是从0开始。这是您需要了解的一些事情。
答案 2 :(得分:2)
在某些 Pascal版本中,例如 FreePascal 或 Delphi ,函数或过程的参数列表不能包含类型声明 >,仅输入规范。
因此,要指定这样的数组作为参数,必须在函数/过程声明之前首先声明其类型:
type
// Type declarations
Bucket = ...
Detail = ...
TBuckets = array[1..26, 1..1025] of Bucket;
TDetails = array[1..1025] of Detail;
procedure Reg(Index, Gen: Char; FName, SName, LoginName, Passwords, PID: string;
var Lo: TBuckets; var Main: TDetails);
请注意,即使在参数列表中,其他Pascal(包括ISO Pascal,如果我没记错的话)也确实允许这些即席声明。但是显然您的Pascal方言却没有。
现在,如果看到诸如x: array of Integer
之类的参数规范,则说明正在处理开放数组参数。这不是声明,也不指定一个单一类型,它接受该基本类型的所有一维数组。在我的文章Open array parameters and array of const中有更多相关内容。
这解释了错误消息:参数列表中只有of
可以跟随array
来指定开放数组参数。
其价值:如果您使用FreePascal或Delphi,则应该养成将字符串作为const传递的习惯,如果可能的话:const FName, SName, etc...: string
。