Re: generic unit : compilation error ! please help me



On 24 Feb 2006 01:19:47 -0800, nblanpain@xxxxxxxxxxx wrote:

## parent.ads ## :
generic
type T_Real is digits <>;
package Parent is
type T_Parent is tagged private;
type T_Parent_Access is access all T_Parent;
private
type T_Parent is tagged record
Real : T_Real;
end record;
end Parent;

## child.ads ##
with Parent;
generic
type T_Real is digits <>;
with package Par is new Parent (T_Real);
package Child is
type T_Child is new Par.T_Parent with private;
type T_Child_Access is access all T_Child;
private
type T_Child is new Par.T_Parent with record
Real2 : T_Real;
end record;
end Child;

## parent-test_unit.ads ##
generic
package Parent.Test_Unit is
subtype T_Unit_To_Test is Parent.T_Parent;
subtype T_Unit_To_Test_Access is Parent.T_Parent_Access;
type T_Unit_To_Test_Class_Access is access all T_Unit_To_Test'Class;
type T_Test_Unit is tagged private;
type T_Test_Unit_Access is access all T_Test_Unit;
procedure Set_Unit_To_Test
(This : in out T_Test_Unit;
Utt : in T_Unit_To_Test_Class_Access);
private
type T_Test_Unit is tagged record
Unit_To_Test : T_Unit_To_Test_Class_Access;
end record;
end Parent.Test_Unit;

## parent-test_unit.adb ##
package body Parent.Test_Unit is
procedure Set_Unit_To_Test
(This : in out T_Test_Unit;
Utt : in T_Unit_To_Test_Class_Access) is
begin
This.Unit_To_Test := Utt;
end Set_Unit_To_Test;
end Parent.Test_Unit;

## child-test_unit.ads ##
with Parent.Test_Unit;
generic
with package Parent_Test_Unit is new Parent.Test_Unit;

with package Parent_Test_Unit is new Par.Test_Unit;

Parent of Child and Parent of Parent.Test_Unit should be the same beast.

package Child.Test_Unit is
subtype T_Unit_To_Test is Child.T_Child;
subtype T_Unit_To_Test_Access is Child.T_Child_Access;
type T_Unit_To_Test_Class_Access is access all T_Unit_To_Test'Class;
type T_Test_Unit is new Parent_Test_Unit.T_Test_Unit with private;
type T_Test_Unit_Access is access all T_Test_Unit;
procedure Set_Unit_To_Test
(This : in out T_Test_Unit;
Utt : in T_Unit_To_Test_Class_Access);
private
type T_Test_Unit is new Parent_Test_Unit.T_Test_Unit with record
Unit_To_Test2 : T_Unit_To_Test_Class_Access;
end record;
end Child.Test_Unit;

## child-test_unit.adb ##
package body Child.Test_Unit is
procedure Set_Unit_To_Test
(This : in out T_Test_Unit;
Utt : in T_Unit_To_Test_Class_Access) is
begin
Parent_Test_Unit.Set_Unit_To_Test
(Parent_Test_Unit.T_Test_Unit (This),
Parent_Test_Unit.T_Unit_To_Test_Class_Access (Utt)); --
error !!!!!!!
This.Unit_To_Test2 := Utt;
end Set_Unit_To_Test;
end Child.Test_Unit;

P.S. Don't use pointers, generics and Hungarian notation.

--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
.



Relevant Pages

  • Re: Generic Collection
    ... type Table is private; ... some other set-theoretic operations on the containers. ... the package in question does not define Tuple. ... case is generics. ...
    (comp.lang.ada)
  • generic unit : compilation error ! please help me
    ... package Parent is ... type T_Parent is tagged private; ... with package Par is new Parent; ... package body Parent.Test_Unit is ...
    (comp.lang.ada)
  • Re: Specialization generic package parameters
    ... and a generic package that uses it: ... type Some_T is new T with private; ... C++ does not have contracted generics anyway. ... should rather extend the parent, ...
    (comp.lang.ada)
  • Re: [Newbie] Visibility parent-child
    ... > package Parent is ... > package Parent.Child is ... > type Object is private; ...
    (comp.lang.ada)
  • Re: generics in Ada 83
    ... type X is private; with procedure Y ... is Null_Proc; package Inner is ... ... Such an approach complicates the process of instantiating the generic, but may be OK if it results in an overall reduction in the complexity of the instantiation process. ... In such a case, you probably want to redesign to have several packages that factor out the likely subsets: several generics that provide the non-overlapping subsets of the possible services, and perhaps some higher-level generics that instantiate 2 or more of the non-overlapping subsets to provide overlapping subsets. ...
    (comp.lang.ada)