我有一个通用的二叉搜索树包,名为gen_BST,它的'我刚创建的子名为gen_BST.AVL。
当我尝试编译代码时,Ada编译器给出了一条错误消息: “无限制类型的完成不能受到限制” - 这是什么意思,我该如何解决?
忽略正文/规范,这是记录声明:
--Gen_BST:
--Type Declarations
TYPE Node IS LIMITED PRIVATE; -- The node itself.
TYPE Root IS ACCESS Node; -- Pointer to the node.
PRIVATE
--Record Declaration
TYPE Node IS TAGGED LIMITED RECORD
Data : Data_Type;
Left_Child, Right_Child : Root;
END RECORD;
--Gen_BST.AVL:
TYPE AVL_Node IS PRIVATE;
TYPE AVL_Root IS ACCESS AVL_Node;
PRIVATE
TYPE AVL_Node IS NEW Node WITH RECORD
Height : Natural;
END RECORD;
答案 0 :(得分:2)
当您说type AVL_Node is new Node ...
时,AVL_Node
会继承Node
的各种属性,其中一个属性是有限的(ARM 7.5(3))。 AVL_Node
的公开视图不受限制,因此完整视图也必须如此。一个解决方法是限制公共视图(type AVL_Node is limited private;
);或者,您可以完整查看Node
非限制(type Node is tagged record ...
)。
许多人会同意标记类型应该始终受到限制,但我想知道为什么Node
和AVL_Node
被公开宣布?我原以为他们是实施的一部分。