Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Oop Ada扩展聚合初始化_Oop_Initialization_Ada - Fatal编程技术网

Oop Ada扩展聚合初始化

Oop Ada扩展聚合初始化,oop,initialization,ada,Oop,Initialization,Ada,我很确定这很容易:) 我有一个抽象的标记类型NamedStructure,在规范的私有部分有三个字段: 名称(字符串) 结构(大致为一个数组) 数字(正数) 然后我创建了一个子类Chord,它基本上是: type Chord是新命名的结构,记录为空; 使用Spark时,我需要初始化和弦对象,但我面临一个问题 Chord\u对象:Chord:=(NamedStructure'(Name=>“”, 结构=>(其他=>错误), 记录为空的注释数量=>0); 未编译,错误消息为 scalada-

我很确定这很容易:)

我有一个抽象的标记类型NamedStructure,在规范的私有部分有三个字段:

  • 名称(字符串)
  • 结构(大致为一个数组)
  • 数字(正数)
然后我创建了一个子类Chord,它基本上是:

type Chord是新命名的结构,记录为空;
使用Spark时,我需要初始化和弦对象,但我面临一个问题

Chord\u对象:Chord:=(NamedStructure'(Name=>“”,
结构=>(其他=>错误),
记录为空的注释数量=>0);
未编译,错误消息为

scalada-chords.adb:44:53: expected private type "NamedStructure" defined at scalada-namedstructures.ads:52
scalada-chords.adb:44:53: found a composite type

我没有找到使用扩展聚合的正确构造,我也不明白为什么。有什么想法吗?

错误表明
NamedStructure
是私有类型,因此无法使用聚合进行初始化。你可以试试

type Chord is new NamedStructure with null record;

Chord_Object : Chord := (NamedStructure with null record);

虽然
NamedStructure
的实例字段现在将保持未初始化状态。

是的,NamedStructure是一个私有类型,但由于它是Chord的超类,我希望它的组件可见,但我肯定错了。我必须再次阅读我的Barnes:)作为一个附加组件,正如您在问题中提到的SPARK,在这种情况下,SPARK中可能也不允许使用类型扩展(另请参见。是的,关于Spark,你是对的!我改变了构建对象的方式,发现了一个错误。我创建了一个带有in-out签名的构造函数,而不是只带有out签名的构造函数,这迫使我初始化对象。