Pascal 找不到数组声明的错误
上面说 致命:语法错误,为变量lo的预期值,但为[found] 但我真的看不出有什么问题。 我试图更改变量名,但似乎不起作用Pascal 找不到数组声明的错误,pascal,Pascal,上面说 致命:语法错误,为变量lo的预期值,但为[found] 但我真的看不出有什么问题。 我试图更改变量名,但似乎不起作用 procedure reg( index, gen : char; fname, sname, loginname, passwords, pid : string; var lo : array [1..26,1..1025] of bucket ; var
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;
它应该是没有错误的,但是它表示语法错误。当你在声明一个过程或函数的参数的时候,你不能定义一个数组。你需要事先做这样的数组来定义数组类型,而不是:< /p>
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;
在声明过程或函数的参数时,不能定义数组。您需要事先做这样的数组来定义数组类型,而不是:
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;
错误消息表示编译器需要关键字of,但找到了一个左括号[ 原因是我猜在过程声明中,您不能定义数组的边界。例如,您不能说整型的main:array[1..2],您只能说整型的main:array 您可以尝试定义数组类型,然后将该类型用作过程参数:
type TwoInts = array[1..2] of integer;
procedure PrintTwoInts(ti: TwoInts)
begin
WriteLn(ti[1], ti[2])
end;
我已经很长时间没有用Pascal编程了,所以上面的方法可能有效,也可能无效。我不记得ti是通过值还是通过引用传递的,以及过程中的数组索引是否总是从0开始。这是一些您需要了解的事情。错误消息说编译器预期的关键字是,但它发现了一个开放的括号[ 原因是我猜在过程声明中,您不能定义数组的边界。例如,您不能说整型的main:array[1..2],您只能说整型的main:array 您可以尝试定义数组类型,然后将该类型用作过程参数:
type TwoInts = array[1..2] of integer;
procedure PrintTwoInts(ti: TwoInts)
begin
WriteLn(ti[1], ti[2])
end;
我已经很长时间没有用Pascal编程了,所以上面的方法可能有效,也可能无效。我不记得ti是通过值还是通过引用传递的,以及过程中的数组索引是否总是从0开始。这是您需要了解的一些情况。参数列表
在某些Pascal版本中,如FreePascal或Delphi,函数或过程的参数列表不能包含类型声明,只能包含类型规范
因此,要将此类数组指定为参数,必须在函数/过程声明之前首先声明其类型:
类型
//类型声明
桶=。。。
细节=。。。
TBuckets=桶的数组[1..26,1..1025];
t细节=细节的数组[1..1025];
过程RegIndex,Gen:Char;FName,SName,LoginName,Passwords,PID:string;
var Lo:TBuckets;var Main:TDetails;
请注意,如果我没记错的话,其他Pascal(包括ISO Pascal)也允许这些即席声明,即使在参数列表中也是如此。但显然,您的Pascal方言不允许
开放数组参数
现在,如果您看到一个参数规范,如x:array of Integer或类似的,那么您正在处理开放数组参数。这不是一个声明,也不是指定一个单一类型,它接受该基类型的所有类型的一维数组。更多信息,请参阅我的文章
这解释了错误消息:只有的可以在参数列表中跟随数组,以指定打开的数组参数
值得一提的是:如果您使用的是FreePascal或Delphi,那么您应该养成以const形式传递字符串的习惯,如果可能的话:const FName、SName等…:string。参数列表
在某些Pascal版本中,如FreePascal或Delphi,函数或过程的参数列表不能包含类型声明,只能包含类型规范
因此,要将此类数组指定为参数,必须在函数/过程声明之前首先声明其类型:
类型
//类型声明
桶=。。。
细节=。。。
TBuckets=桶的数组[1..26,1..1025];
t细节=细节的数组[1..1025];
过程RegIndex,Gen:Char;FName,SName,LoginName,Passwords,PID:string;
var Lo:TBuckets;var Main:TDetails;
请注意,如果我没记错的话,其他Pascal(包括ISO Pascal)也允许这些即席声明,即使在参数列表中也是如此。但显然,您的Pascal方言不允许
开放数组参数
现在,如果您看到一个参数规范,如x:array of Integer或类似的,那么您正在处理开放数组参数。这不是一个声明,也不是指定一个单一类型,它接受该基类型的所有类型的一维数组。更多信息,请参阅我的文章
这解释了错误消息:只有的可以在参数列表中跟随数组,以指定打开的数组参数
值得一提的是:如果您使用的是FreePascal或Delphi,那么您应该养成以const形式传递字符串的习惯,如果可能的话:const FName、SName等…:string。谢谢您的帮助。首先声明类型后,它现在可以工作。谢谢您的帮助。首先声明类型后,它现在可以工作。谢谢
谢谢你的帮助。首先声明类型后,它现在可以工作了。感谢您的帮助。首先声明类型之后,它现在可以工作了。