Pascal 找不到数组声明的错误

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

上面说

致命:语法错误,为变量lo的预期值,但为[found]

但我真的看不出有什么问题。 我试图更改变量名,但似乎不起作用

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。

谢谢您的帮助。首先声明类型后,它现在可以工作。谢谢您的帮助。首先声明类型后,它现在可以工作。谢谢
谢谢你的帮助。首先声明类型后,它现在可以工作了。感谢您的帮助。首先声明类型之后,它现在可以工作了。