Compilation 《美国残疾人法案》;“预计编制单位”;错误

Compilation 《美国残疾人法案》;“预计编制单位”;错误,compilation,ada,Compilation,Ada,我正在尝试声明一个新类型,以便将数组作为参数传递给过程。看起来是这样的: type Arr_Type is array(1..1000) of String; procedure proceed(Arg1: in Arr_Type) is begin <program body> end type Arr\u type是字符串的数组(1..1000); 程序继续(Arg1:处于Arr_类型)为 开始 结束 每当我尝试编译它时,我都会收到一个“预期编译单元”错误。如果我删除了类型

我正在尝试声明一个新类型,以便将数组作为参数传递给过程。看起来是这样的:

type Arr_Type is array(1..1000) of String;

procedure proceed(Arg1: in Arr_Type) is
begin
<program body>
end
type Arr\u type是字符串的数组(1..1000);
程序继续(Arg1:处于Arr_类型)为
开始
结束

每当我尝试编译它时,我都会收到一个“预期编译单元”错误。如果我删除了类型声明,我就不会再得到错误,但是我显然需要它,如果我把它放在文件的其他地方,我就会得到一个错误。我对Ada有点陌生,所以我不完全确定这里发生了什么。

Ada中的程序必须划分为编译单元(过程、函数或包)。类型声明必须包含在单元中,以便您可以将其包装在过程中:

procedure Main is

  type Arr_Type is array(1..1000) of String;

  procedure proceed(Arg1: in Arr_Type) is
  begin
   <program body>
  end proceed;

begin

   call to proceed

end Main;
my_package.adb:

package body My_Package is

  procedure proceed(Arg1: in Arr_Type) is
  begin
   <program body>
  end Proceed;

end My_Package;
包体我的包是
程序继续(Arg1:处于Arr_类型)为
开始
结束进行;
结束我的包;

然后,您可以像往常一样将此包包含在My_包的
中(以及可能的
使用

严格来说,“每个文件一个编译单元”是一个GNAT限制。重要的一点是,传递给Ada编译器的内容必须作为编译单元进行结构化。有关定义,请参见LRM中的第10.1.1节:@Jacobsparrenadersen,好的,我对该部分有点不确定。现在好多了?
package body My_Package is

  procedure proceed(Arg1: in Arr_Type) is
  begin
   <program body>
  end Proceed;

end My_Package;