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;

稍后在我的代码中,我尝试像这样实例化节点:

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 回答