我有一些看起来像这样的 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;
稍后在我的代码中,我尝试像这样实例化节点:
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 调用中分配任何判别式。