我在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是月份类型,我有以下错误
编译:运算符“+”的无效操作数类型
如何添加此值以获取整数? 谢谢!
答案 0 :(得分:4)
答案 1 :(得分:4)
使用构造X is new
时,您正在创建新类型。它与其他类型不兼容,并且应该存在于其自己的Universe中,除了其他X
类型之外,它只与其进行交互。
这意味着您必须事先考虑您的输入策略,以确保您可能想要执行数学运算的所有对象具有相同的类型(在同一个Universe中运行)。
如果您想要做的是将X
的允许范围设置为限制,但是允许它在其他整数的数学表达式中运行,则应该而不是使用子类型,像这样:
subtype year is integer range 1996..2100;
(注意没有new
)。
但是,如果你真的希望Year
和Month
s在他们自己的不兼容的宇宙中,但是有一个内部情况,你需要对它们做转换,你是什么可以做的是在这种情况下将它们转换为整数。
key:= (Integer(yearVal)*100) + Integer(monthVal);
同样,如果你每次将这些对象用于任何事情时都必须这样做,那么这将是一个主要的PITA,所以如果是这种情况,它们应该是相同类型的子类型(可能是整数)。
答案 2 :(得分:2)
如前所述,要么使用类型转换,要么使用子类型而不是类型。如果您之前没有使用过子类型,请按以下步骤操作:
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;