0

次のような Ada コードがあります。

type NODE;
type NODE_PTR is access NODE;
type PRINT_PTR is access procedure(X: NODE_PTR);
type NODE is
record
             parent : NODE_PTR;
             left : NODE_PTR;
             right : NODE_PTR;
             id : INTEGER;
             visit : PRINT_PTR;
end record;

procedure PRINT(X : NODE_PTR) is
...
end PRINT;

コードの後半で、次のように NODE をインスタンス化しようとします。

root : NODE_PTR;
id_value : INTEGER;
...
root := new NODE(NULL, NULL, NULL, id_value, PRINT'access);
...

この:

ret_ptr : NODE_PTR;
id_value : INTEGER;
...
ret_ptr := new NODE(parent, NULL, NULL, id_value, PRINT'access);

このコードを "gnatmake" しようとすると、コンパイラは両方の割り当てステートメントについて、"無効な制約: 型に判別式がありません" と文句を言います。どうしたの?私が知る限り、NODE で判別式を定義していないし、これらの新しい NODE 呼び出しで判別式を割り当てようとしているわけでもありません。

4

1 に答える 1

4

初期値でアクセス タイプを割り当てる場合、次のような ' が必要です。

root := new NODE'(NULL, NULL, NULL, id_value, PRINT);
于 2013-08-14T18:03:00.717 に答える