Ада расширение агрегатная инициализация - PullRequest
1 голос
/ 14 марта 2019

Ну, я вполне уверен, что это легко:)

У меня есть абстрактный теговый тип NamedStructure , имеющий три поля в приватной части спецификации:

  • имя (строка)
  • структура (примерно массив)
  • число (положительное число)

Затем я создал подкласс Chord , что в основном:

type Chord is new NamedStructure with null record;

Играя со Spark, мне нужно инициализировать мои аккорд объекты, но я столкнулся с проблемой.

Chord_Object : Chord := (NamedStructure'(Name => "", 
                                         Structure => (Others => False), 
                                         Number_Of_Notes => 0) with null record);

не делаетt компилируется, и сообщение об ошибке

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

Я не могу найти правильную конструкцию, использующую агрегат расширения, и не понимаю, почему.Есть идеи?

1 Ответ

2 голосов
/ 14 марта 2019

Ошибка предполагает, что NamedStructure является закрытым типом и поэтому не может быть инициализирован с использованием агрегата.Вы можете попробовать

type Chord is new NamedStructure with null record;

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

, хотя поля экземпляра NamedStructure теперь не будут инициализированы.

...