Types 如何在Ada中声明整型类型的整个负范围的子类型?

Types 如何在Ada中声明整型类型的整个负范围的子类型?,types,ada,Types,Ada,如果我想声明一个纯正整数类型,我需要做的就是: subtype Positive is Integer range 0..Integer'Last; 我想我可以应用同样的逻辑来声明一个负类型,如下所示: subtype Negative is Integer range Integer'First..1; 然而,在编译时,我遇到了以下错误: attribute "First" may not be used in a subtype mark 为什么会出现此

如果我想声明一个纯正整数类型,我需要做的就是:

      subtype Positive is Integer range 0..Integer'Last;
我想我可以应用同样的逻辑来声明一个负类型,如下所示:

      subtype Negative is Integer range Integer'First..1;
然而,在编译时,我遇到了以下错误:

    attribute "First" may not be used in a subtype mark

为什么会出现此错误,以及如何声明仅为负值的子类型?

您的问题可能是由于某个地方的输入错误,因为您的确切示例很好:

package SO is
   subtype Negative is Integer range Integer'First..1;
end SO;
汇编:

% gnatmake so.ads
gcc-4.9 -c -gnata -gnato -fstack-check -gnat12 -gnatyO -gnatv -gnati1 -gnatf -gnatn so.ads

GNAT 4.9.2
Copyright 1992-2014, Free Software Foundation, Inc.

Compiling: so.ads (source file time stamp: 2016-08-19 05:05:16)
 3 lines: No errors
%

您的问题可能是由于某个地方的打字错误,因为您的确切示例很好:

package SO is
   subtype Negative is Integer range Integer'First..1;
end SO;
汇编:

% gnatmake so.ads
gcc-4.9 -c -gnata -gnato -fstack-check -gnat12 -gnatyO -gnatv -gnati1 -gnatf -gnatn so.ads

GNAT 4.9.2
Copyright 1992-2014, Free Software Foundation, Inc.

Compiling: so.ads (source file time stamp: 2016-08-19 05:05:16)
 3 lines: No errors
%

您的
Negative
子类型包括两个非负值。不应该先
Integer
给我
Integer
类型的最低值吗?是的,但您的子类型包括
0
1
值。如果您只需要负值,则首先需要
Integer'-1
。您的
子类型包括两个非负值。是否应首先
整数
为我提供
整数
类型的最低值?是的,但您的子类型包括值
0
1
。如果您只需要负值,则首先需要
Integer'-1
。发现错误,忘记在代码中提及
范围
。谢谢。爱德华,如果你一开始就公布了你的实际代码,你会更快地得到答案。发现错误,忘了在代码中提到
range
。谢谢。爱德华,如果你一开始就公布了你的实际代码,你会更快地得到答案。