2016-11-19 84 views
0

我收到一个错误,我找不到任何文档来解释需要在我的代码中修复哪些内容。代码是:“完整视图声明必须出现在私有部分”的说明

type BinarySearchTreePoint is limited private; 
    type Node; 
    type BinarySearchTreePoint is access Node; 

    type Node is 
     record 
     Llink, Rlink : BinarySearchTreePoint; 
     Ltag, Rtag : Boolean; --True indicates pointer to lower level, 
           -- False a thread. 
     Info : Customer; 
     end record; 

我得到的错误是declaration of full view must appear in private part。它将此错误指向type BinarySearchTreePoint is access Node;行,并且我不确定错误消息的含义。

+1

假如把它放在私处包裹。没有必要声明私有类型,然后发布有关它的详细信息。 –

+0

参见[*§3.10.1不完整类型声明*](http://www.ada-auth.org/standards/12rm/html/RM-3-10-1.html)。 – trashgod

+0

@BrianDrummond我不知道如何? '类型BinarySearchTreePoint是有限的私人访问节点;'?像那样的东西? –

回答

5

当你说你需要type Foo is private;(或limited private)提供的私处一个完整的声明;当然,这意味着你必须有一个私人部分

告诉你将与

package Foo is 
    type BinarySearchTreePoint is limited private; 
private 
    type Node; 
    type BinarySearchTreePoint is access Node; 

    type Node is 
     record 
     Llink, Rlink : BinarySearchTreePoint; 
     ... 

编译代码,但如果你需要Node是包的外部可见你需要这样说

package Foo is 
    type BinarySearchTreePoint is limited private; 
    type Node is private; 
    -- stuff to do with getting a Node from a BinarySearchTreePoint?? 
    function Content (Of_Node : Node) return Customer; 
private 
    type BinarySearchTreePoint is access Node; 

    type Node is 
     record 
     Llink, Rlink : BinarySearchTreePoint; 
     ... 
+1

该解决方案还解释了什么'全景声明必须出现在私人部分'手段。有'BinarySearchTreePoint'的两个声明。第一个说“是私人的”,这意味着这里不会给出完整的类型定义。相反,完整的类型定义将在包'Foo'的私有部分的第二个声明中给出。这是'BinarySearchTreePoint'的第二个声明。因此,对于任何读者,人员或编译器来说,完整的类型定义都是可见的,可以看到完整的定义。 – B98