1

我有一个通用的二叉搜索树包,名为 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;
4

1 回答 1

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 ...)。

许多人会同意标记类型应始终受到限制,但我想知道为什么NodeAVL_Node公开声明?我原以为它们是实施的一部分。

于 2013-02-11T08:39:57.527 回答