1

我是 ada 的新手,我想定义一个矢量包并能够将它传递给一个方法,我应该在哪里定义包,这是我需要的代码

package Document is new Ada.Containers.Vectors(Positive,Unbounded_String);
use Document;

我不知道放在哪里,所以它会对主文件和另一个函数文件可见。

4

3 回答 3

6

如果您使用 GNAT(来自 AdaCore 的 GPL 版本或 FSF GCC 版本),您需要一个文件document.ads(与您要放置主程序和其他文件的工作目录相同)。

您的新包Document需要“<code>with”另外两个包:Ada.Containers.VectorsAda.Strings.Unbounded.

你不能放进use Document;document.ads;它需要放入使用它的包Documentwith。该use子句控制您是否需要编写完全限定名称 - 例如,按照您的方式编写Document,您会说

with Ada.Containers.Vectors;
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
package Document is new Ada.Containers.Vectors (Positive, Unbounded_String);

但写起来会更传统

with Ada.Containers.Vectors;
with Ada.Strings.Unbounded;
package Document is new Ada.Containers.Vectors
  (Positive,                                                
   Ada.Strings.Unbounded.Unbounded_String);

你的主程序和其他包现在可以说with Document;(如果你愿意,也可以说use Document;)。

于 2012-05-16T09:54:42.573 回答
3

除了西蒙的回答之外,您还可以将您在任何地方声明的两行放入声明部分。这可以在子程序中,例如您的主程序、库或其他任何地方。

主要程序示例:

with Ada.Containers.Vectors;
with Ada.Strings.Unbounded;
procedure My_Main is
   package Document is new Ada.Containers.Vectors
     (Positive,
      Ada.Strings.Unbounded.Unbounded_String);
   -- use it or declare other stuff...
begin
   -- something...
end My_Main;

要在多个源文件中使用它,请将其放入您的一个包或像 Simon 所写的单独文件中。

于 2012-05-16T10:51:06.350 回答
2

除此之外,要实际声明您需要放入声明性部分的向量:

my_document : document.vector;

然后就可以使用vector包中描述的方法了

于 2012-05-16T11:06:10.233 回答