1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Новые вопросы - какая функция определяет наличие или отсутствие утечек памяти? Я скачал ВинАДУ, поставил, как подключить пакет, содержащий заголовки виндовых библиотек? with ADA.Windows не рабтает, нет такого пакета.
Внимательнее будь. Это основа успеха при освоении Ады. Смотри:
use Func_Tree_Vectors; -- Это у тебя было, правда?
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; -- Вот эта строка была на несколько строк ниже ...
procedure Copy(C: Key_Based_Vectors.Cursor) is
type Public_Cursor is record Container : access Key_Based_Vectors.Vector; Index : integer; end record;
function Fuck_Cursor is new Ada.Unchecked_Conversion(Key_Based_Vectors.Cursor, Public_Cursor);
begin Update_Element (Fuck_Cursor ( C ).Container.all, C, Update'Access); end Copy;
begin return V: Key_Based_Vectors.Vector do Set_Length(V, A'Length); V.Iterate (Copy'Access); end return; end To_Vector;
, и уже все компилируется. Почему надо было переносить use выше, понятно? Если бы она была там, где ее написал ты, то доступен только один Update_Element: из пакета Func_Tree_Vectors, чей use присутствует выше по тексту. А эта функция должна принимать другой тип контейнера, о чем Ада тебе пыталась сказать. Номера строк, в которых инстанцирован "Ada.Containers.Vectors.Vector" не просто так даются, можно было посмотреть, что происходит в этих строках...
Как только use перенесен выше по тексту, уже доступна и вторая процедура Update_Element, из Key_Based_Vectors. Тут уже компилятор способен по параметрам разобраться, какую из перегруженных версий вызывать...