2016-11-19 83 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