我有一些看起来像这样的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”这段代码时,编译器会抱怨两个assign语句:“无效约束:类型没有判别式”。 怎么了?据我所知,我没有在NODE中定义任何判别式,我也没有尝试在新的NODE中调用任何判别式 - 调用。
答案 0 :(得分:4)
在分配具有初始值的访问类型时,您需要'喜欢这个:
root := new NODE'(NULL, NULL, NULL, id_value, PRINT);