comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: declaration of an incomplete private type before the private part
Date: Fri, 01 Feb 2008 09:00:34 -0500
Date: 2008-02-01T09:00:34-05:00	[thread overview]
Message-ID: <wccr6fwwzct.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: 5e8bc9cb-a2c1-4c9c-8308-ca8b709801f5@e23g2000prf.googlegroups.com

Javi <fjvera@gmail.com> writes:

> hi guys,
>
> I'm very newbye to ADA, so my apologizes in advance.
>
> 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.

This is a flaw in the design of Ada.  You can't instantiate a generic
with a private type, in the same package where the private type is
declared, and make the instantiation visible to clients (i.e. put it
in the visible part).

Your solution above (don't make it private) works.
Niklas Holsti gave another solution.

A third solution is to put the instantiation in a child
package, or make it a child itself.  Then clients have
to "with" both the parent and the child.  This won't work
if the private part needs to see the instantiation,
but it's OK if the body needs to see the instantiation.

- Bob



      parent reply	other threads:[~2008-02-01 14:00 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
2008-02-01  9:53   ` Javi
2008-02-01 14:00 ` Robert A Duff [this message]
replies disabled

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