2016-11-19 1 views
0

Ich erhalte eine Fehlermeldung, dass ich keine Dokumentation finden kann, um zu erklären, was in meinem Code behoben werden muss. Der Code ist:Erklärung von "Deklaration der vollständigen Ansicht muss im privaten Teil erscheinen"

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; 

Der Fehler, den ich bekommen habe ist declaration of full view must appear in private part. Es wirft diesen Fehler auf die Zeile type BinarySearchTreePoint is access Node;, und ich bin mir nicht sicher, was die Fehlermeldung bedeutet.

+1

Setzen Sie, dass in dem privaten Teil sagen, müssten von das Paket. Es hat keinen Sinn, einen privaten Typ zu deklarieren und dann die Details darüber zu veröffentlichen. –

+0

Siehe auch [* §3.10.1 unvollständige Typdeklarationen *] (http://www.ada-auth.org/standards/12rm/html/RM-3-10-1.html). – trashgod

+0

@BrianDrummond Ich bin mir nicht sicher, wie? 'type BinarySearchTreePoint ist ein eingeschränkter privater Zugriffsknoten;'? So ähnlich? –

Antwort

5

Wenn Sie sagen, type Foo is private; (oder limited private) Sie eine vollständige Erklärung im privaten Teil zu schaffen, sind erforderlich; was natürlich bedeutet, dass Sie haben einen privaten Teil haben.

Der Code, den Sie kompilieren zeigen mit

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

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

aber wenn Sie Node müssen außerhalb der Verpackung sichtbar sein Sie so etwas wie

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

Diese Lösung erklärt auch, was "Deklaration der vollständigen Ansicht muss im privaten Teil erscheinen" bedeutet. Es gibt zwei Deklarationen von 'BinarySearchTreePoint'. Der erste sagt 'ist privat', was bedeutet, dass eine vollständige Typdefinition hier nicht gegeben wird. Stattdessen wird die vollständige Typdefinition in einer zweiten Deklaration im privaten Teil des Pakets "Foo" angegeben. Dies ist, was die zweite Deklaration von 'BinarySearchTreePoint' tut. Die vollständige Typdefinition wird somit für jeden Leser, Mensch oder Compiler, sichtbar, der die vollständige Definition sehen darf. – B98

Verwandte Themen