NiGHTS
2018-09-11 22:20:57 UTC
As the subject line indicates, I am having a compile error which I am having difficulty solving.
I have two distinct records, in this example called "Master_Record" and "Working_Record". One contains an Integer, the other a "pointer" to that Integer. In this context, Working_Record depends on Master_Record. There can be many Working_Record instances for a single Master_Record. The Copy function is intended to enforce this rule by acting as an object factory, requiring an instance of Master_Record to create Working_Record. I know this isn't perfect, so any suggestions on a better strategy would be appreciated.
Ultimately the purpose of this is for Working_Record to be a copy-friendly record, where Master_Record is not intended to be used directly, except as a place to anchor the variable scope. The resulting code will be written as a library object containing two records just like I have here, as well as a Copy function. The user of this library object is expected to create an instance of Master_Record, then copy it to Working_Record.
----------------------------------------
type Master_Record is record
Root : aliased Integer;
-- Here is where other general variables are kept
end record;
type Working_Record is record
Root_Pointer : access Integer;
-- Here is where specific instance variables are kept
end record;
function Copy (
Source : in out Master_Record
) return Working_Record is
begin
return (Root_Pointer => Source.Root'Access); -- << Error here >>
end Copy;
MR : Master_Record;
WR : Working_Record := Copy (MR);
----------------------------------------
Any ideas on how to achieve this goal? I'm sure its something simple. Thanks in advance!
I have two distinct records, in this example called "Master_Record" and "Working_Record". One contains an Integer, the other a "pointer" to that Integer. In this context, Working_Record depends on Master_Record. There can be many Working_Record instances for a single Master_Record. The Copy function is intended to enforce this rule by acting as an object factory, requiring an instance of Master_Record to create Working_Record. I know this isn't perfect, so any suggestions on a better strategy would be appreciated.
Ultimately the purpose of this is for Working_Record to be a copy-friendly record, where Master_Record is not intended to be used directly, except as a place to anchor the variable scope. The resulting code will be written as a library object containing two records just like I have here, as well as a Copy function. The user of this library object is expected to create an instance of Master_Record, then copy it to Working_Record.
----------------------------------------
type Master_Record is record
Root : aliased Integer;
-- Here is where other general variables are kept
end record;
type Working_Record is record
Root_Pointer : access Integer;
-- Here is where specific instance variables are kept
end record;
function Copy (
Source : in out Master_Record
) return Working_Record is
begin
return (Root_Pointer => Source.Root'Access); -- << Error here >>
end Copy;
MR : Master_Record;
WR : Working_Record := Copy (MR);
----------------------------------------
Any ideas on how to achieve this goal? I'm sure its something simple. Thanks in advance!