2010-12-16 37 views
2

我已经摆脱了所有其他编译时错误,除了“编译单元预期”,它在我的导入语句之后开始。我猜我需要创建一个包?如果是这样,我该怎么做?我有几个功能都在同一个.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" 

鲆graCimuS

+0

在用程序包打包代码之前,这些编译器错误不存在。 – 2010-12-16 19:35:44

+1

这些编译器消息不能属于您发布的代码(因为它没有28行)。而且GCC会希望这段代码位于一个'mypackage.adb'文件中;并且需要在'mypackage.ads'中有一个包规范。 – 2010-12-16 20:46:23

+0

的确,我把它剥离了下来。并感谢.ads中的包规范建议。这可能是个诀窍,所以请随意将此评论推荐给答案。 – 2010-12-16 21:02:11

回答

2

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

在任何情况下,GCC都希望此代码位于文件mypackage.adb;并要求在mypackage.ads有一个包装规格。

+0

这是一件值得注意的事情。 gcc的Ada实现采取了相当不寻常的步骤,即强制文件名与文件内容的标识符名称匹配。具体来说,如果文件包含名为'fnord'的包体或子例程,那么文件**必须**(默认情况下)被命名为'fnord.adb'。如果它包含名为'fnord'的插件规范,则文件**必须**名为'fnord.ads'。这是gcc的gnat Ada实现的一个怪癖,而不是一般的Ada编译器 – 2010-12-22 14:01:06

4

包体是包规范的实现。

没有冒犯,但您需要熟悉一些基本的Ada编程概念。

也许从Lovelace Tutorial开始,这是一个老派,但一个好东西。