comp.lang.ada
 help / color / mirror / Atom feed
From: stt@houdini.camb.inmet.com (Tucker Taft)
Subject: Re: Help on extending a private record from a private record with a generic attribute...
Date: 1998/04/16
Date: 1998-04-16T00:00:00+00:00	[thread overview]
Message-ID: <ErIzJM.Hyn.0.-s@inmet.camb.inmet.com> (raw)
In-Reply-To: 35364E81.94B51B0F@amherst.com


Christopher Campise (crc@amherst.com) wrote:

: Ada95 on a Rational Apex compiler:
: I have a "superclass" with a private record consisiting of a generic
: type attribute.  I need to inherit this from within another package but
: am receiving compiler errors stating that "a record extension will be
: provided iff the parent record is tagged," (which it is).  Is this even
: legal?  I looked everywhere for examples and found none that relate to
: this, adahome.com, Programming in Ada95, Rendezvous with Ada95, plus
: other tutorials.  Any ideas?

You cannot select items from a generic package.  You must
first instantiate the generic package, and select items from
the instance.  

: For example:

: ***********
: generic
:    type Value_Class is private;

: package Generic is
:    type Class is tagged private;
:          .
:          .

: private
:    type Class is tagged
:       record
:          Some_Value : Value_Class;
:       end record;

: end Generic;

I presume you didn't really call it "Generic" since that
is an Ada reserved word...

: ***********

: with Generic;

: package MyPackage is
:     type Class is new Generic.Class with private;  -> Message: "CLASS
: (2nd one) denotes no component of Generic; a record extension

: will be provided iff  parent type is a tagged type" (which it is)

This message is misleading you.  The problem is that "Generic" is
a generic package, rather than a (non-generic) package.  You cannot
select anything from a generic package.  

You need something like:

    with Generic;
    package Instance is new Generic(My_Value_Class);

and then refer to Instance.Class.  If you don't want to
instantiate first, then you need to define a new generic which
has a formal package, e.g.:

   with Generic;
   generic 
       with package Instance is new Generic(<>);
   package MyPackage is
       type Class is new Instance.Class with private;
    ...

:                 .
:                 .
: private
:    type Class is new Generic.Class with    ->   Message: "CLASS (2nd
: one) denotes no component of Generic; a record extension
: record
: will be provided iff  parent type is a tagged type" (which it is)

Same problem.  "Generic" is a generic, not an instance.

:          Index : Integer;
:       end record;
: end MyPackage;
: ***********

: --
: Chris Campise, Associate Engineer     phone:  (716)631-0610 x384
: Amherst Systems Inc.                         fax:    (716)631-0629
: 30 Wilson Road                                 E-Mail: crc@amherst.com
: Buffalo, NY 14221                            WWW: www.amherst.com

--
-Tucker Taft   stt@inmet.com   http://www.inmet.com/~stt/
Intermetrics, Inc.  Burlington, MA  USA




  reply	other threads:[~1998-04-16  0:00 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1998-04-16  0:00 Help on extending a private record from a private record with a generic attribute Christopher Campise
1998-04-16  0:00 ` Tucker Taft [this message]
1998-04-17  0:00   ` Assistance " Anonymous
1998-04-17  0:00     ` Tucker Taft
1998-04-17  0:00     ` Christopher Campise
replies disabled

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