1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Новые вопросы - какая функция определяет наличие или отсутствие утечек памяти? Я скачал ВинАДУ, поставил, как подключить пакет, содержащий заголовки виндовых библиотек? with ADA.Windows не рабтает, нет такого пакета.
И всё-таки, как это сделать без непроверенной конверсии с идеологически неверным кулхацкеровским "раздеванием" курсора?
Да легко:
function To_Vector(a: Key_Arr) return Key_Based_Vectors.Vector is
Arr_Index: Integer := a'First;
procedure Update(Item: in out Key_Base) is begin Item := A(Arr_Index); Arr_Index := Arr_Index + 1; end Update;
use Key_Based_Vectors; begin return V: Key_Based_Vectors.Vector do
declare
procedure My_Copy(C: Key_Based_Vectors.Cursor) is begin V.Update_Element (C, Update'Access); end My_Copy;
begin Set_Length(V, A'Length); V.Iterate (My_Copy'Access); end;
end return; end To_Vector;
Где "раздевание" курсора? Где конверсии? Нету... Однако, компилируется без проблем. Но вот контейнер должен быть описан выше по коду, чем процедура обработки. А к вопросу
Цитата
нафига этой процедуре принимать контейнер, если она и так принимает курсор?
ответ - такой: Чтоб без подобных выкрутасов, как ты сделал (с непроверенными конверсиями и другими кулхацкерскими штучками) не позволить тебе изменить с помощью Update_Element константный контейнер (было бы слишком просто: получил Курсор, передал его в Update_Element, и все, прощай константность вектора? Нет уж, лучше так, как сейчас...). Безопасность превыше всего. Кстати, изначально в А2005 была-таки версия Update_Element, которая принимала всего 2 параметра: Курсор и Процесс. Но это была дыра в безопасности, и ее очень быстро закрыли...