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"

马克西姆斯

4

3 回答 3

4

包体是包规范的实现。

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

也许从Lovelace Tutorial开始,它是一个老歌,但却是个好东西。

于 2010-12-16T20:28:47.130 回答
2

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

在任何情况下,GCC 都希望这段代码在一个文件中mypackage.adb;并且需要在mypackage.ads.

于 2010-12-16T21:59:39.593 回答
0

有同样的错误,我忘记了它是如何工作的,所以经过反复试验,我发现

WITH Ada.Text_IO;
USE Ada.Text_IO;
WITH Ada.Integer_Text_Io;
USE Ada.Integer_Text_IO;
WITH Ada.Float_Text_IO;
USE Ada.Float_Text_IO;
--ecrire(x) lire(x) put(x) get(x);
--errors handling
WITH Ada.IO_Exceptions;


--Additionnal log functions alike
WITH Ada.Numerics.Elementary_Functions;
USE Ada.Numerics.Elementary_Functions;

--  WITH Ada.Text_Io;
--  USE Ada.Text_Io;
--  WITH Ada.Integer_Text_Io;
--  USE Ada.Integer_Text_Io;

procedure remplit is

   type tablo is array(1.. 5) of float;
   

Procedure toto ( Init : in float ; T : out tablo ) is

Begin

For I in T'first + 1..T'last loop
      T(i) := Init * float(i);
      put(t(i));
   End loop;

   End toto;
   
   T : tablo;
   
begin
   toto(1.5, T);
   
   end remplit;

而不是产生此错误的...

WITH Ada.Text_IO;
USE Ada.Text_IO;
WITH Ada.Integer_Text_Io;
USE Ada.Integer_Text_IO;
WITH Ada.Float_Text_IO;
USE Ada.Float_Text_IO;
--ecrire(x) lire(x) put(x) get(x);
--errors handling
WITH Ada.IO_Exceptions;


--Additionnal log functions alike
WITH Ada.Numerics.Elementary_Functions;
USE Ada.Numerics.Elementary_Functions;

--  WITH Ada.Text_Io;
--  USE Ada.Text_Io;
--  WITH Ada.Integer_Text_Io;
--  USE Ada.Integer_Text_Io;



   type tablo is array(1.. 5) of float;
   

Procedure remplit ( Init : in float ; T : out tablo ) is

Begin

For I in T'first + 1..T'last loop
      T(i) := Init * float(i);
      put(t(i));
   End loop;


   
   end remplit;

顺便说一句,这与包裹无关。

于 2021-11-03T12:45:12.130 回答