Package 艾达,看看我的包裹。(“预期的编译单元”是什么?)
我已经排除了所有其他编译时错误,除了“compilationunitexpected”,它在我的import语句之后立即开始。我猜我需要创建一个包?如果是,我该怎么做?我有几个函数都位于同一个.ADB文件中 编辑:所以我试了一下 查看我的包裹: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
-- 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编译器