Gps &引用;无法为文件random.ads生成代码";运行.adb程序时
我在Ada中运行程序时遇到一些问题。我有以下三个项目文件(我使用GPS): 类型。广告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_
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