Ada95标记有限记录给我错误"完成无限制类型不能限制"

时间:2013-02-11 05:18:09

标签: compiler-errors record ada

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

1 个答案:

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

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