Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ada中的嵌套聚合中分配记录_Ada - Fatal编程技术网

如何在Ada中的嵌套聚合中分配记录

如何在Ada中的嵌套聚合中分配记录,ada,Ada,我正在尝试初始化一个记录变量,该变量本身包含一个使用聚合的嵌套记录,但似乎无法获得正确的语法。谢谢你的帮助 with Step; use Step; package Pattern is -- ADT type Pattern_Type is tagged private; -- ADT components type Bars_Type is private; -- ADT instance methods function Tempo (This

我正在尝试初始化一个记录变量,该变量本身包含一个使用聚合的嵌套记录,但似乎无法获得正确的语法。谢谢你的帮助

with Step; use Step;

package Pattern is   

   -- ADT
   type Pattern_Type is tagged private;

   -- ADT components
  type Bars_Type is private; 

  -- ADT instance methods
  function Tempo (This: Pattern_Type) return Integer;       
  function Bars (This: Pattern_Type)  return Bars_Type;    
  function Get_Next_Step(This: Pattern_Type ) return Step_Type;   

  -- Static methods
  function Get_Basic_Beat return Pattern_Type;

private

  type Bars_Type is range 0..2;                  
  Number_Of_Steps : constant Natural := 32;

  type Active_Step_Type is mod Number_Of_Steps;   
  type Steps_Type is array( Active_Step_Type ) of Step_Type;


  type Pattern_Type is tagged record
    Tempo             : Integer range 40..400;
    Bars              : Bars_Type := 1;
    Steps             : Steps_Type;
    Active_Step       : Active_Step_Type := 1;
  end record;                   

  -- Package variable
 Basic_Beat : Pattern_Type := 
   ( Tempo => 125, 
     Steps => Steps_Type'(1..31 => Step_Type'(Instrument => 'K', Velocity => 127, Offset => 0, Active => True)), 
     others => <> );

end Pattern;
我在GPS中得到了这个构建错误 应为私有类型步骤\步骤中定义的类型。ads:4,找到了复合类型


我试过各种不同的阶梯式组合。。。行

根据您的需要,您有不同的选择:

将Step_Type的记录实现公开,以便其他不相关的包可以使用它。但这显然破坏了封装。 添加一个函数,该函数可以根据Step包公共区域中的输入参数创建Step_类型。这是我个人喜欢的方法。 使模式成为Step的子包提供了私有部分的可见性。我通常只在层次结构合理的情况下才这样做。 将步骤类型和模式类型放在同一个包中。然后,它们的私有部分也彼此可见。我也只有在设计布局合理的情况下才会这样做。 2的示例:

使用Ada.Text_IO;使用Ada.Text\u IO; 你好 包装步骤是 -ADT 类型步骤类型被标记为私有; 函数生成 文书:文字; 速度:整数; 偏移量:整数; 活动:布尔值 返回步进式; 私有的 类型步骤\类型标记为记录 仪器:字符:=''; 速度:整数:=0; 偏移量:整数:=0; 活动:布尔值:=false; 结束记录; 函数生成 文书:文字; 速度:整数; 偏移量:整数; 活动:布尔值 返回步骤类型 is Instrument=>Instrument, 速度=>速度, 偏移量=>偏移量, 主动=>主动; 结束步骤; 使用步骤; 包装模式是 -ADT 类型模式\u类型被标记为私有; -ADT组件 类型栏\u类型为私有类型; 私有的 类型栏的类型范围为0..2; 步数:常数自然数=32; 类型Active\u Step\u类型是\u步数的模数; 类型步骤类型是步骤类型的数组活动步骤类型; 类型模式\u类型被标记为记录 节奏:整数范围40..400; 钢筋:钢筋类型:=1; 步骤:步骤类型; 活动步骤:活动步骤类型:=1; 结束记录; -包变量 基本节奏:模式类型:= 节奏=>125, 步骤=>others=>Make'K',127,0,True, 其他=>; 末端模式; 开始 喂,世界!; 结束问候;
根据您的需要,您有不同的选择:

将Step_Type的记录实现公开,以便其他不相关的包可以使用它。但这显然破坏了封装。 添加一个函数,该函数可以根据Step包公共区域中的输入参数创建Step_类型。这是我个人喜欢的方法。 使模式成为Step的子包提供了私有部分的可见性。我通常只在层次结构合理的情况下才这样做。 将步骤类型和模式类型放在同一个包中。然后,它们的私有部分也彼此可见。我也只有在设计布局合理的情况下才会这样做。 2的示例:

使用Ada.Text_IO;使用Ada.Text\u IO; 你好 包装步骤是 -ADT 类型步骤类型被标记为私有; 函数生成 文书:文字; 速度:整数; 偏移量:整数; 活动:布尔值 返回步进式; 私有的 类型步骤\类型标记为记录 仪器:字符:=''; 速度:整数:=0; 偏移量:整数:=0; 活动:布尔值:=false; 结束记录; 函数生成 文书:文字; 速度:整数; 偏移量:整数; 活动:布尔值 返回步骤类型 is Instrument=>Instrument, 速度=>速度, 偏移量=>偏移量, 主动=>主动; 结束步骤; 使用步骤; 包装模式是 -ADT 类型模式\u类型被标记为私有; -ADT组件 类型栏\u类型为私有类型; 私有的 类型栏的类型范围为0..2; 步数:常数自然数=32; 类型Active\u Step\u类型是\u步数的模数; 类型步骤类型是步骤类型的数组活动步骤类型; 类型模式\u类型被标记为记录 节奏:整数范围40..400; 钢筋:钢筋类型:=1; 步骤:步骤类型; 活动步骤:活动步骤类型:=1; 结束记录; -包变量 基本节奏:模式类型:= 节奏=>125, 步骤=>others=>Make'K',127,0,True, 其他=>; 末端模式; 开始 喂,世界!; 结束问候; 模式没有步骤的私有部分的可见性,其中定义了步骤类型,毕竟它是私有类型。要使用aggregatesPattern,您需要该类型的完全可见性。该模式没有步骤的私有部分的可见性,其中定义了步骤类型,毕竟它是私有类型。为了使用聚合,您需要类型的完全可见性
package Step is

  -- ADT
  type Step_Type is tagged private;      

  -- ADT instance methods
  function Instrument (This : Step_Type) return Character;
  function Velocity (This : Step_Type) return Integer;
  function Offset (This : Step_Type) return Integer;
  function Active (This : Step_type) return Boolean;

private   

  type Step_Type is tagged record            
    Instrument  : Character := ' ';      
    Velocity    : Integer := 0; 
    Offset      : Integer := 0;      
    Active      : Boolean := false;
  end record;

end Step;