comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: declaration of an incomplete private type before the private part
Date: Fri, 01 Feb 2008 10:49:04 +0200
Date: 2008-02-01T10:49:04+02:00	[thread overview]
Message-ID: <47a2d8fd$0$23828$4f793bc4@news.tdc.fi> (raw)
In-Reply-To: <5e8bc9cb-a2c1-4c9c-8308-ca8b709801f5@e23g2000prf.googlegroups.com>

Javi wrote:

> My problem: I need to do a declaration such as:
> 
> -----------------------------------------
> ...
>    type ListNode is private;
>    type List is private;
> 
>    package IterList is new Iterators   (Creator => List,
>                                         Item => ListNode,
>                                         getFirst => Lists.getFirst,
>                                         getNext => Lists.getNext,
>                                         isLast => Lists.isLast);
> 
>    function makeIter (L : List) return IterList.Iterator;
> ...
>    private:
>       (complete declaration of ListNode and List)
> -----------------------------------------
> 
> 
> The problem is that I need to complete the type (ListNode and List)
> before instancing the new package. But I do not know how to do that!
> The only solution I have found is to declare the types non-private and
> then give them the complete declaration. Obviously, this solution does
> not satisfy me since I want to make the types private.

As I understand it, you want to instantiate the Iterators package 
before the "private" part, because you want to use the type 
Iterator, defined in the instance, in the declaration of public 
oeprations (makeIter). One way to work around this problem is to 
define a new type for that purpose:

    type ListNode     is private;
    type List         is private;
    type ListIterator is private;   -- Added.

    function makeIter (L : List) return ListIterator;

    private

    type ListNode is ... -- Complete declaration.
    type List is     ... -- Complete declaration.

    packate IterList is new Iterators (....);  -- As above.

    type ListIterator is new IterList.Iterator;

HTH,

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
       .      @       .



  reply	other threads:[~2008-02-01  8:49 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-01  8:28 declaration of an incomplete private type before the private part Javi
2008-02-01  8:49 ` Niklas Holsti [this message]
2008-02-01  9:53   ` Javi
2008-02-01 14:00 ` Robert A Duff
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox