Gps &引用;无法为文件random.ads生成代码";运行.adb程序时

Gps &引用;无法为文件random.ads生成代码";运行.adb程序时,gps,ada,Gps,Ada,我在Ada中运行程序时遇到一些问题。我有以下三个项目文件(我使用GPS): 类型。广告 package types is subtype T_valeurind is Integer range 2..14; type T_couleur is (s, h, c, d); type t_carte is record valeur : T_valeurind; couleur : T_couleur; end record; type T_

我在Ada中运行程序时遇到一些问题。我有以下三个项目文件(我使用GPS):

类型。广告

package types is
   subtype T_valeurind is Integer range 2..14;
   type T_couleur is (s, h, c, d);
   type t_carte is record
      valeur : T_valeurind;
      couleur : T_couleur;
   end record;

   type T_jeu is array (1..7) of t_carte;

   function trans(val: Character) return T_valeurind;

end types;
Trans.adb

with types;
use types;
WITH Text_Io , Ada.Integer_Text_Io;
USE Text_Io , Ada.Integer_Text_Io;


function trans(val : Character) 
   return T_valeurind is
   ret: Integer;
begin 
   case val is
     when '3' => ret:=3;
     when '4' => ret:=4;
     when '5' => ret:=5;
     when '6' => ret:=6;
     when '7' => ret:=7;
     when '8' => ret:=8;
     when '9' => ret:=9;
     when 'T' => ret:=10;
     when 'J' => ret:=11;
     when 'Q' => ret:=12;
     when 'K' => ret:=13;
     when 'A' => ret:=14;
     when others => null;
  end case;
  return ret;
end trans;
WITH Text_Io , Ada.Integer_Text_Io;
USE Text_Io , Ada.Integer_Text_Io;
with types;
use types;


procedure test is
begin
   put(T_valeurind'Image(trans('c')));
end test;
Test.adb

with types;
use types;
WITH Text_Io , Ada.Integer_Text_Io;
USE Text_Io , Ada.Integer_Text_Io;


function trans(val : Character) 
   return T_valeurind is
   ret: Integer;
begin 
   case val is
     when '3' => ret:=3;
     when '4' => ret:=4;
     when '5' => ret:=5;
     when '6' => ret:=6;
     when '7' => ret:=7;
     when '8' => ret:=8;
     when '9' => ret:=9;
     when 'T' => ret:=10;
     when 'J' => ret:=11;
     when 'Q' => ret:=12;
     when 'K' => ret:=13;
     when 'A' => ret:=14;
     when others => null;
  end case;
  return ret;
end trans;
WITH Text_Io , Ada.Integer_Text_Io;
USE Text_Io , Ada.Integer_Text_Io;
with types;
use types;


procedure test is
begin
   put(T_valeurind'Image(trans('c')));
end test;
我只是想执行test.adb来检查我的函数“trans”是否工作正常。当我用GPS建立文件时,一切正常。但当我想要运行它们时,我有以下消息,并且没有执行:

无法为文件types.ads生成代码(程序包规范)

gprbuild:**编译阶段失败

[2018-12-02 02:01:39]进程退出,状态为4100%(2/2),运行时间:01.65秒

但令人不安的是,我第一次尝试运行代码时,它就成功了。没有任何改变,它停止了工作。 我不知道该怎么办。我看到这条消息只是告诉我.ads文件是不可编译的,但我试图编译和运行的是一个.adb文件,所以我没有得到它。。 你知道为什么它不起作用吗


提前谢谢大家

您似乎忘记在测试程序的上下文中包含
函数Trans
。如果它不在上下文中,你就不能使用它

尝试添加:

带Trans;

对于
过程测试的上下文子句

来说,您似乎忘记了在测试程序的上下文中包含
函数Trans
。如果它不在上下文中,你就不能使用它

尝试添加:

带Trans;

对于
过程测试的上下文子句

首先,这些不是项目文件,其类型为
.gpr
;它们是项目中的Ada源文件

您的
types.ads
承诺了
函数trans
,这意味着它需要
types.adb
中的包体

包体类型为
函数转换(val:字符)
返回T_valeurind是
ret:整数;
开始
案例val是
当'3'=>ret:=3时;
当'4'=>ret:=4时;
当'5'=>ret:=5时;
当'6'=>ret:=6时;
当'7'=>ret:=7时;
当'8'=>ret:=8时;
当'9'=>ret:=9时;
当'T'=>ret:=10时;
当'J'=>ret:=11时;
当'Q'=>ret:=12时;
当'K'=>ret:=13时;
当'A'=>ret:=14时;
当其他=>null时;
终例;
返回ret;
末端反式;
末端类型;
(嗯,如果你传入一个无效字符,你将返回未初始化的数据,就像没有得到一个
Constraint\u Error
T\u valeurind
包含值2,你不应该覆盖它吗?)

您的
trans.adb
指定了一个库级函数

当我用GPS建立文件时,一切正常。但当我想要运行它们时,我有以下消息,并且没有执行:

如果程序包规范(
types.ads
)需要一个主体(
types.adb
),而您没有提供它,编译器将在您尝试编译它时生成您报告的消息。如果您尝试编译
test.adb
,它就可以了。如果您尝试构建
test.adb
,它将尝试编译包
类型
,并且将失败,无论您是尝试构建还是构建并运行


我不知道这第一次怎么会奏效

首先,这些不是项目文件,其类型为
.gpr
;它们是项目中的Ada源文件

您的
types.ads
承诺了
函数trans
,这意味着它需要
types.adb
中的包体

包体类型为
函数转换(val:字符)
返回T_valeurind是
ret:整数;
开始
案例val是
当'3'=>ret:=3时;
当'4'=>ret:=4时;
当'5'=>ret:=5时;
当'6'=>ret:=6时;
当'7'=>ret:=7时;
当'8'=>ret:=8时;
当'9'=>ret:=9时;
当'T'=>ret:=10时;
当'J'=>ret:=11时;
当'Q'=>ret:=12时;
当'K'=>ret:=13时;
当'A'=>ret:=14时;
当其他=>null时;
终例;
返回ret;
末端反式;
末端类型;
(嗯,如果你传入一个无效字符,你将返回未初始化的数据,就像没有得到一个
Constraint\u Error
T\u valeurind
包含值2,你不应该覆盖它吗?)

您的
trans.adb
指定了一个库级函数

当我用GPS建立文件时,一切正常。但当我想要运行它们时,我有以下消息,并且没有执行:

如果程序包规范(
types.ads
)需要一个主体(
types.adb
),而您没有提供它,编译器将在您尝试编译它时生成您报告的消息。如果您尝试编译
test.adb
,它就可以了。如果您尝试构建
test.adb
,它将尝试编译包
类型
,并且将失败,无论您是尝试构建还是构建并运行


我不知道这第一次怎么会奏效

使用强大的Ada Enum功能(以及一些错误的输入处理策略,如异常),首先可以避免整个问题。您的
trans
过程将毫无用处

如果您对枚举值的顺序关系感兴趣,您还可以使用Ada的
'First
*
(第一个枚举文字)、
'Last
(最后一个枚举文字)、
'Pos
(位于枚举内部)、
'Succ
(下一个枚举文字),
'Pred
(以前的枚举文字)

如果对变量执行内存映射,可以使用
'Valid
检查变量是否具有有效值,并保存约束错误异常捕获的需要

Enum litteral value: '1' - memory representation: -1
No previous
Next: '2'

Enum litteral value: '2' - memory representation:  2
Previous: '1'
Next: '3'

Enum litteral value: '3' - memory representation:  3
Previous: '2'
Next: 'J'

Enum litteral value: 'J' - memory representation:  11
Previous: '3'
Next: Q

Enum litteral value: Q - memory representation:  12
Previous: J
Next: K

Enum litteral value: K - memory representation:  13
Previous: Q
Next: ACE

Enum litteral value: ACE - memory representation:  14
Previous: K
No next

Handling of user input: Unknown user value
Exception catched: raised CONSTRAINT_ERROR : bad input for 'Value: "Unknown user value"

Setting value to Ace instead
tmp2 value: ACE - memory representation:  14

Memory mapping would result in invalid enum for value: -3
Memory mapping would result in invalid enum for value: -2
Enum with value: -1 is valid.
Memory mapping would result in invalid enum for value:  0
Memory mapping would result in invalid enum for value:  1
Enum with value:  2 is valid.
Enum with value:  3 is valid.
Memory mapping would result in invalid enum for value:  4
Memory mapping would result in invalid enum for value:  5
Memory mapping would result in invalid enum for value:  6
Memory mapping would result in invalid enum for value:  7
Memory mapping would result in invalid enum for value:  8
Memory mapping would result in invalid enum for value:  9
Memory mapping would result in invalid enum for value:  10
Enum with value:  11 is valid.
Enum with value:  12 is valid.
Enum with value:  13 is valid.
Enum with value:  14 is valid.
Memory mapping would result in invalid enum for value:  15