From: "Rego, P." <pvrego@gmail.com>
Subject: Constructors with multiple inheritance
Date: Thu, 29 Sep 2011 12:40:28 -0700 (PDT)
Date: 2011-09-29T12:40:28-07:00 [thread overview]
Message-ID: <11513972.2788.1317325228383.JavaMail.geo-discussion-forums@yqnv12> (raw)
Hi people
I have a package which implements a class with two items which actually are classes which builds different kind of queues. One of them is a queue whose items are of the kind of the parent class. I need to implement a constructor to the parent class, then I need to implement the constructors for the two queues. For me, it`s more intuitive from OO point of view that the three constructors are implemented as methods (not just independent calls), and that was just the point where I got stuck.
So, the packages are declared as
------------------------
-- parent_package.ads --
------------------------
limited with Parent_Package.Child_Package;
package Parent_Package is
type Parent_Class is tagged
record
Child : access Child_Package.Parent_Queue_Class;
Modes : access Child_Package.Modes_Queue_Class;
end record;
type Parent_Class_Ptr is access all Parent_Class;
function Construct (Sender : in Parent_Class) return Parent_Class_Ptr;
end Parent_Package;
------------------------
-- parent_package.adb --
------------------------
with Parent_Package.Child_Package;
package body Parent_Package is
function Construct (Sender : in Parent_Class) return Parent_Class_Ptr is
New_Parent : constant Parent_Class_Ptr := new Parent_Class;
begin
New_Parent.Child := Sender.Child.Construct;
New_Parent.Modes := Sender.Modes.Construct;
return New_Parent;
end Construct;
end Parent_Package;
--------------------------------------
-- parent_package-child_package.ads --
--------------------------------------
package Parent_Package.Child_Package is
type Parent_Queue_Class is tagged
record
Next : access Parent_Queue_Class;
Parent : access Parent_Class;
end record;
type Parent_Queue_Class_Ptr is access all Parent_Queue_Class;
function Construct (Sender : in Parent_Queue_Class) return Parent_Queue_Class_Ptr;
type Modes_Queue_Class is tagged
record
Next : access Modes_Queue_Class;
Mode : Integer;
end record;
type Modes_Queue_Class_Ptr is access Modes_Queue_Class;
function Construct (Sender : in Modes_Queue_Class) return Modes_Queue_Class_Ptr;
end Parent_Package.Child_Package;
--------------------------------------
-- parent_package-child_package.ads --
--------------------------------------
package body Parent_Package.Child_Package is
function Construct
(Sender : in Parent_Queue_Class) return Parent_Queue_Class_Ptr is
pragma Unreferenced (Sender);
New_Queue : constant Parent_Queue_Class_Ptr := new Parent_Queue_Class;
begin
return New_Queue;
end Construct;
function Construct
(Sender : in Modes_Queue_Class) return Modes_Queue_Class_Ptr is
pragma Unreferenced (Sender);
New_Queue : constant Modes_Queue_Class_Ptr := new Modes_Queue_Class;
begin
New_Queue.Mode := 0;
return New_Queue;
end Construct;
end Parent_Package.Child_Package;
---------------------
-- parent_main.adb --
---------------------
with Parent_Package;
procedure Parent_Main is
Obj : Parent_Package.Parent_Class_Ptr;
begin
Obj := Obj.Construct;
end Parent_Main;
---------------------------
when I build the code, I get the messages:
warning: useless assignment to "Obj", value never referenced (ok, I agree sure)
warning: null value not allowed here
warning: "Constraint_Error" will be raised at run time
and sure when I execute the code I get
raised CONSTRAINT_ERROR : parent_main.adb:5 access check failed
(BTW, if I implement the constructors independent from the class - i.e. without referencing the parent class as the argument -, they return no error message and the results after that are according to expected, but sure it breaks the oo design.)
So, how can I fix this?
Thanks!
next reply other threads:[~2011-09-29 19:40 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-29 19:40 Rego, P. [this message]
2011-09-29 20:20 ` Constructors with multiple inheritance Dmitry A. Kazakov
2011-09-30 3:11 ` Rego, P.
2011-09-30 7:36 ` Dmitry A. Kazakov
2011-09-30 14:04 ` Rego, P.
2011-09-30 16:29 ` Robert A Duff
2011-09-30 19:14 ` Rego, P.
2011-09-30 16:42 ` Dmitry A. Kazakov
2011-09-30 19:42 ` Rego, P.
2011-10-06 12:46 ` Julian Leyh
2011-11-09 2:24 ` Rego, P.
2011-11-09 8:39 ` Dmitry A. Kazakov
2011-11-10 3:47 ` Rego, P.
2011-11-10 7:09 ` AdaMagica
2011-11-10 7:20 ` AdaMagica
2011-11-10 8:35 ` Dmitry A. Kazakov
2011-11-12 15:16 ` Rego, P.
2011-11-12 15:30 ` Rego, P.
2011-11-12 16:28 ` Dmitry A. Kazakov
2011-11-12 17:41 ` Rego, P.
2011-11-10 8:33 ` Simon Wright
2011-11-10 9:01 ` Georg Bauhaus
2011-11-10 9:09 ` Georg Bauhaus
2011-11-10 18:16 ` Jeffrey Carter
2011-11-10 19:39 ` Dmitry A. Kazakov
2011-11-09 9:00 ` Simon Wright
2011-11-10 3:54 ` Rego, P.
2011-10-07 0:08 ` Shark8
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox