Ada 错误:无法为文件random.ads(软件包规范)生成代码

Ada 错误:无法为文件random.ads(软件包规范)生成代码,ada,gnat,Ada,Gnat,不知何故,我无法用GPS编译(也不能运行)我的Ada代码。我得到一个错误: cannot generate code for file random.ads (package spec) gprbuild: *** compilation phase failed random.ads文件如下所示: with Ada.Numerics.Float_Random; use Ada.Numerics.Float_Random; package random is protected ran

不知何故,我无法用GPS编译(也不能运行)我的Ada代码。我得到一个错误:

cannot generate code for file random.ads (package spec)
gprbuild: *** compilation phase failed
random.ads文件如下所示:

with Ada.Numerics.Float_Random;
use Ada.Numerics.Float_Random;
package random is

   protected randomOut is
      procedure Inicializal;
      entry Parcel(
                randomout: out Positive;
                from: in Positive;
                to: in Positive := 1
               );
   private
      G: Generator;
      Inicializalt: Boolean := False;
   end randomOut;

   task print is
      entry write(what: in String);
   end print;

end random;
.gpr文件如下所示:

project Default is
   package Compiler is
      for Default_Switches ("ada") use ("-g", "-O2");
   end Compiler;

   for Main use ("hunting.adb");

end Default;

这是什么意思?我怎样才能修好它?谢谢大家!

不能为包规范生成代码

这是正常的,也是意料之中的

您可以编译包体random.adb并为其生成代码,但通常不需要

只需编译主程序(如果是单元测试,则编译测试工具),并让编译器查找其所有依赖项


(如果不能,则可能是您尚未编写它们,或者它找错了位置。如果您需要帮助,请在问题中添加相关信息)。

您无法为包规范生成代码

这是正常的,也是意料之中的

您可以编译包体random.adb并为其生成代码,但通常不需要

只需编译主程序(如果是单元测试,则编译测试工具),并让编译器查找其所有依赖项


(如果不能,要么你还没有写,要么它找错了地方。如果你需要帮助,请在问题中添加相关信息)。

问题是由

   task print is
      entry write(what: in String);
   end print;

由于任何任务都被指定为一个主体,编译器很难做出决定:它在一个规范文件中有一个主体,而这个主体必须被编译,而这个规范文件没有。将任务移动到.adb文件解决了问题。

问题是由

   task print is
      entry write(what: in String);
   end print;

由于任何任务都被指定为一个主体,编译器很难做出决定:它在一个规范文件中有一个主体,而这个主体必须被编译,而这个规范文件没有。将任务移动到.adb文件解决了问题。

此代码在包规范中完全合法。正如@BrianDrummond所说,问题是GPS被要求编译一个需要主体的规范。它将执行许多检查,但无法生成输出代码。你需要为此编译主体。这段代码在包规范中是完全合法的。正如@BrianDrummond所说,问题是GPS被要求编译一个需要主体的规范。它将执行许多检查,但无法生成输出代码。你需要为此编译正文。