操作数“+”Ada 95的类型无效

时间:2011-06-16 23:04:55

标签: 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是月份类型,我有以下错误

编译:运算符“+”的无效操作数类型

如何添加此值以获取整数? 谢谢!

3 个答案:

答案 0 :(得分:4)

使用type conversion

答案 1 :(得分:4)

使用构造X is new时,您正在创建新类型。它与其他类型不兼容,并且应该存在于其自己的Universe中,除了其他X类型之外,它只与其进行交互。

这意味着您必须事先考虑您的输入策略,以确保您可能想要执行数学运算的所有对象具有相同的类型(在同一个Universe中运行)。

如果您想要做的是将X的允许范围设置为限制,但是允许它在其他整数的数学表达式中运行,则应该而不是使用子类型,像这样:

subtype year is integer range 1996..2100;

(注意没有new)。

但是,如果你真的希望YearMonth 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;