索引组件ADA中所需的数组类型

时间:2014-10-03 17:57:22

标签: arrays compilation ada subtype

好吧,所以我正在编写一个程序,旨在将7位输入与已知的7位数输入进行比较,并找出它们之间的距离。一切都编译得很好,除了我收到一个错误,指出“索引组件中需要的数组类型”

  pickbit1:
  FOR X IN 1 .. 7 LOOP
  pickdigit1:
  FOR Y IN 0 .. 9 LOOP
     IF a1(X) /= Compare(Y)(X) THEN
        d1(X)(Y) := d1(X)(Y) + 1;
     END IF;
  END LOOP pickdigit1;
END LOOP Pickbit1;

错误发生在创建第二个for循环的行。我不知道为什么会有一个错误引用那里的数组的索引。 这是我的数组类型。

subtype segment is Character range '0' .. '1';
subtype distance is Integer;
subtype c is Character range ' ' .. ' ';
type Segment_Array is array(1 .. 7) of segment;
type Digit_Array is array(1 .. 7) of Character range '0' .. '1';
type Compare_Array IS array(0 .. 9) of Digit_Array;
type Distance_Array IS array(0 .. 9) of distance;
type Total_Array IS array(0 .. 9, 0 .. 9) of Integer;

a1 a Segment_Array,d1是Distance_Array,Compare是Compare_Array

1 个答案:

答案 0 :(得分:2)

如果d1Distance_Array,则d1(X)会返回distanceInteger的子类型)。 Integer(或distance)不是数组类型,无法进一步编入索引,因此编译器在您尝试执行d1(X)(Y)时会抱怨。 我不知道为什么编译器抱怨创建循环的行,它应该抱怨该行:

d1(X)(Y) := d1(X)(Y) + 1;