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

あなたのその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 に答える