次のような 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 呼び出しで判別式を割り当てようとしているわけでもありません。