Как обсуждалось в Программирование на языке Ада: расширенные генерики , это может помочь различить универсальную единицу и экземпляр этой универсальной единицы.Компилятор говорит вам, что вы не можете создать экземпляр p1
в дочернем элементе p1
, потому что «дочерние элементы универсального блока должны быть универсальными, несмотря ни на что».
Вместо этого создайте экземпляр p1
в другом месте и используйте этот экземпляр для создания экземпляра каждого из дочерних элементов p1
.
Добавление: в качестве другого конкретного примера, procedure Jumble
создает экземпляр Ada.Strings.Bounded
:
Max_Word : constant Positive := 24;
package ASB is new Ada.Strings.Bounded.Generic_Bounded_Length(Max_Word);
Позже процедура использует этот экземпляр для создания экземпляра универсального дочернего элемента, Ada.Strings.Bounded.Hash
:
function Hash is new Ada.Strings.Bounded.Hash(ASB);