1

我在以下情况下遇到约束错误:

从过程中获取受约束的缓冲区:

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
4

1 回答 1

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

现在哪一行给出了约束错误?(当然,在清理任何编译器错误之后)。

于 2013-01-30T14:44:16.267 回答