Integer “操作数”的类型无效+&引用;Ada 95
我在Ada95的ans spec文件中定义了两个整数范围,如下所示:Integer “操作数”的类型无效+&引用;Ada 95,integer,range,ada,operand,Integer,Range,Ada,Operand,我在Ada95的ans spec文件中定义了两个整数范围,如下所示: type year is new integer range 1996..2100; type month is new integer range 1..12; 当我编译主体文件的代码时,我有这样一行代码: .... key: integer; begin key:= (yearVal*100) + monthVal; YearVal是年类型,monthVal是月类型,我有以下错误 编译:运算符“+”的
type year is new integer range 1996..2100;
type month is new integer range 1..12;
当我编译主体文件的代码时,我有这样一行代码:
....
key: integer;
begin
key:= (yearVal*100) + monthVal;
YearVal是年类型,monthVal是月类型,我有以下错误
编译:运算符“+”的操作数类型无效
如何添加此值以获得整数?
谢谢 使用。如前所述,使用类型转换或使用子类型而不是类型。如果您以前没有使用过subtype,下面介绍如何使用:
subtype year is Integer range 1996 .. 2100;
subtype month is Integer range 1 .. 12;
yearVal : year;
monthVal : month;
然后你可以自由地做:
key : Integer;
begin
key := (yearVal*100) + monthVal;
当您使用构造
X是新的
时,您正在创建一个新类型。它与其他类型不兼容,应该存在于它自己的宇宙中,在那里它只与其他X
类型交互
这意味着您必须事先考虑您的键入策略,以确保您可能要对其执行数学运算的所有对象都属于相同的类型(在相同的宇宙中运行)
如果您想做的是在允许的范围X
上设置一个界限,但允许它在数学表达式中与其他整数一起运算,则应使用子类型,如下所示:
subtype year is integer range 1996..2100;
(注意:无新代码)
然而,如果你真的希望年和月在它们各自不兼容的宇宙中,但是有一个内部案例,在这个案例中,你需要对它们进行数学转换,你能做的就是在这个案例中将它们转换成整数
key:= (Integer(yearVal)*100) + Integer(monthVal);
同样,如果您每次使用这些对象做任何事情时都必须这样做,那么这将是一个主要的PITA,因此如果是这种情况,它们应该是相同类型的子类型(可能是整数)。或者(比如
key:=Integer(yearVal)*100+Integer(monthVal);
)或者将年份和月份子类型设置为整数。这将使他克服编译器错误,但可能无法修复此错误暴露的基础设计问题。