2015-09-05 2 views
3

У меня есть пакет Employee и пакет Office, скажем. Пакет Office имеет массив объектов Employee. Я могу объявить массив, так чтоИнициализировать массив до нулевых объектов

officeArray : Office.Vector(1..20); 

Но как бы я инициализирует officeArray к набору 20 нулевых объектов? Я попробовал

officeArray := (others => null); 

Это не работает. Компилятор говорит, что хочет объекты Employee. Я могу создать фиктивный объект Employee для заполнения массива, или есть ли другой способ сделать это?

+0

Является ли это массивом типов доступа или нет? –

+0

Мы могли бы помочь вам намного лучше, если бы вы показали нам декларацию - по крайней мере - 'Office.Vector'. –

+0

И декларация «Сотрудник». Какая бы ни была эта декларация, вам нужно будет определить для себя_, что значит «служащий» быть «нулевым» сотрудником. Предполагая, что «Сотрудник» является записью, нет встроенного определения «нулевого» значения этой записи, более того, существует встроенное определение «null» 'Integer'. – ajb

ответ

4

Вот пример программы:

With Ada.Text_IO; Use Ada.Text_IO; 
With Ada.Integer_Text_IO; Use Ada.Integer_Text_IO; 

procedure Program is 

    type Employee is record 
     name : String(1..50); 
     end record; 

    type EmployeeArr is array (Positive range <>) of Employee; 

    type EmployeePtr is access all Employee; 

    type EmployeePtrArr is array (Positive range <>) of EmployeePtr; 

    employees1 : EmployeeArr(1..20); 
    employees2 : EmployeePtrArr(1..20); 

begin 
    employees1 := (others => null); -- this will NOT compile 
    employees2 := (others => null); -- this compiles fine 
end Program; 

Для того, чтобы назначить (others => null) тип элемента массива значение должно быть типом доступа.

Смежные вопросы