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
next prev parent 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