Package 艾达,看看我的包裹。(“预期的编译单元”是什么?)

Package 艾达,看看我的包裹。(“预期的编译单元”是什么?),package,ada,compilationunit,Package,Ada,Compilationunit,我已经排除了所有其他编译时错误,除了“compilationunitexpected”,它在我的import语句之后立即开始。我猜我需要创建一个包?如果是,我该怎么做?我有几个函数都位于同一个.ADB文件中 编辑:所以我试了一下 查看我的包裹: -- Import Statements with Ada.Text_Io; use Ada.Text_Io; package body MyPackage is -- Declarations -- Functions end MyPackage

我已经排除了所有其他编译时错误,除了“compilationunitexpected”,它在我的import语句之后立即开始。我猜我需要创建一个包?如果是,我该怎么做?我有几个函数都位于同一个.ADB文件中

编辑:所以我试了一下

查看我的包裹:

-- Import Statements
with Ada.Text_Io;
use Ada.Text_Io;

package body MyPackage is

-- Declarations
-- Functions

end MyPackage;
但gcc看到MyPackage时会尖叫:

a_.adb:27:18: loop or block statement must follow label
a_.adb:27:18: reserved word "array" cannot be used as identifier
a_.adb:28:01: declarations must come before "begin"

Maximus graCimuS

包体是包规范的实现

无意冒犯,但您需要熟悉一些基本的Ada编程概念


也许从开始,这是一个古老但很好的东西。

这些编译器消息不属于您发布的代码(因为它没有28行)


在任何情况下,GCC都希望该代码位于文件
mypackage.adb
;并且需要在
mypackage.ads
中有一个软件包规范

在用包包装代码之前,这些编译器错误不存在。这些编译器消息不能属于您发布的代码(因为它没有28行)。GCC希望该代码位于文件
mypackage.adb
中;并且需要在
mypackage.ads
中有一个软件包规范。事实上,我把它删掉了。谢谢你在广告中对包装规格的建议。这可能就是诀窍,所以请随意将此评论提升为答案。这是一件需要注意的重要事情。gcc的Ada实现采取了一个非常不寻常的步骤,强制文件名与文件内容的标识符名匹配。具体来说,如果文件包含名为
fnord
的包体或子例程,则该文件(默认情况下)必须命名为
fnord.adb
。如果它包含名为
fnord
的打包规范,则该文件必须命名为
fnord.ads
。这是gcc gnat Ada实现的一个怪癖,而不是一般的Ada编译器