comp.lang.ada
 help / color / mirror / Atom feed
From: Serge Robyns <serge.robyns@gmail.com>
Subject: Re: Declaring constants for a abstract tagged type and concrete sub classes
Date: Tue, 7 Jul 2015 09:27:28 -0700 (PDT)
Date: 2015-07-07T09:27:28-07:00	[thread overview]
Message-ID: <d191bb4e-0feb-4a7e-af27-db78721f6f68@googlegroups.com> (raw)
In-Reply-To: <mnee97$59n$1@dont-email.me>

On Monday, 6 July 2015 19:37:00 UTC+2, G.B.  wrote:
> On 06.07.15 15:49, Serge Robyns wrote:
> 
> >> In case you can afford a publicly abstract but
> >> privately non-abstract type,
> >>
> >> package Abstract_Root is
> >>      type T_Root is abstract tagged  private;
> >>      procedure Set_XYZ (Self: in out T_Root; ABC : in Integer);
> >>      function Get_XYZ (Self: in T_Root) return Integer;
> >>      No_Element : constant T_Root;  -- or T_Root'Class;
> >> private
> >>      type T_Root is tagged record
> >>         XYZ : Integer;
> >>      end record;
> >>      No_Element : constant T_Root := T_Root'(Xyz => 666);
> >> end Abstract_Root;
> >>
> >> Every object needs to be of a concrete type, whether constant
> >> or not. (...)
> 
> > Seems not to work as expected, at least not on GNAT 2015.
> 
> Just FTR, this is a working example, tested with GNAT 2015;
> did you change T_Root to concrete in the private part of
> Abstract_Root, leaving it abstract only in the public part?
> Is your constant No_Element perhaps declared outside Abstract_Root?
> 
>  > If I use No_Element : constant T_Root; => I get "type of object 
> cannot be abstract" compile error

I found the issue ...
In the private part I still had a type T_Root is abstract tagged record.
This is why I did put it aside for a while and then re-look at it afresh.

Now I'm facing my other issue, how to "merge" the root and child part in a new No_Element ...  This is about valid Ada syntax.

No_Element : constant T_Concrete := ( T_Root.No_Element, 789);

This gets expectingly rejected.  And I'm facing my inexperience in Ada.

Serge

  reply	other threads:[~2015-07-07 16:27 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-06 10:10 Declaring constants for a abstract tagged type and concrete sub classes Serge Robyns
2015-07-06 11:55 ` G.B.
2015-07-06 13:49   ` Serge Robyns
2015-07-06 17:36     ` G.B.
2015-07-07 16:27       ` Serge Robyns [this message]
2015-07-07 17:21         ` G.B.
2015-07-07 19:51           ` Serge Robyns
2015-07-07 20:14             ` Simon Wright
2015-07-07 20:18             ` Jeffrey R. Carter
2015-07-06 15:42 ` Simon Wright
2015-07-06 16:35   ` Serge Robyns
2015-07-06 17:02     ` Bob Duff
2015-07-06 21:16       ` Serge Robyns
2015-07-06 17:30 ` gautier_niouzes
replies disabled

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