generic unit : compilation error ! please help me



hello,
When i compile the following programm, i have the following error on
function Set_Unit_To_Test of class "child-test_unit.adb" :
"14 : invalid tagged conversion, not compatible with type T_Child'Class
defined at child.ads"
I don't undestand this error : please help me !

## 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;
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;

Thanks,

.



Relevant Pages