Непроверенное преобразование для различной длины массива

У меня ошибка ограничения в следующей ситуации:

Получить ограниченный буфер из процедуры:

Get_MyBuffer(data => Buffer); -- This is ok

Буфер имеет тип Unsigned_Byte. Хочу преобразовать его в байт.

function To_Byte is new Unchecked_Conversion (Source => Unsigned_Byte,
                                              Target => Byte);
MyFunction2Pass(To_Byte(Buffer)); -- Having warning 'uncheked conversion to unconstrained array subtype is not portable.

Печать внутри MyFunction2Pass

function MyFunction2Pass(Data : Byte) is
begin
    New_Line(integer'image(integer(Data(1)))); -- **Shoot Constrain Error**
end

1 ответ

Эта ваша линия делает очень много. В этом нет ничего плохого, но это временно неудобно, пока вы получаете это исключение. Вы можете рассмотреть возможность разделения каждого вызова процедуры на отдельную строку, чтобы вы могли отследить, какой вызов выдает ошибку ограничения.

    Bit     : constant boolean := Data(1);  -- I'm guessing this is the right type
    Bit_Int : constant integer := integer(Bit);
    Bit_Img : constant string  := integer'image(Bit_Int);
begin
    New_Line (Bit_Img);
end

Теперь, какая строка дает ошибку ограничения? (После очистки любых ошибок компилятора конечно).

Другие вопросы по тегам