From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,WEIRD_PORT autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: "Alejandro R. Mosteo" Newsgroups: comp.lang.ada Subject: Re: Ada 2005 problem using Iterate Date: Wed, 5 Oct 2016 10:15:02 +0200 Organization: A noiseless patient Spider Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Wed, 5 Oct 2016 08:14:49 -0000 (UTC) Injection-Info: mx02.eternal-september.org; posting-host="65830921499fe3b3a7755169742ded44"; logging-data="12177"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19RFylu+cAkyXWelLpzvC/B" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0 In-Reply-To: Cancel-Lock: sha1:bTnH8irqlbR80JG0Rm+ELh6cNJ8= Xref: news.eternal-september.org comp.lang.ada:31995 Date: 2016-10-05T10:15:02+02:00 List-Id: On 05/10/16 09:28, Roger wrote: > I've successfully used Iterate quite often before but the attached code won't work and I can't figure out why. > Presumably something obvious that I'm blind to! What I see from checking the a-convec.ads spec procedure Iterate (Container : Vector; Process : not null access procedure (Position : Cursor)); is that your Show_Two_Numbers should expect a Cursor and not and index. I don't see any other iterate with a compatible profile. HTH, Alex. > No matter what I try, compiling numbers.adb produces the error messages: > > numbers.adb:24:48: expected access to subprogram "Ada.Containers.Vectors." from instance at numbers.ads:17 > numbers.adb:24:48: found type access to procedure "Show_Two_Numbers" defined at line 24 > > numbers.ads:17 is: > package pNumbers_Vector is new Ada.Containers.Vectors (tNumbers_Index, tNumbers); > numbers.adb:24 is: > Numbers_Vector.Iterate(Show_Two_Numbers'Access); > > Can someone tell me what I'm doing wrong? > Regards, > Roger > > Numbers.ads: > with Ada.Containers.Vectors; > package Numbers is > type tNumbers_Vector is private; > procedure Print_Numbers_Data (Numbers_Vector : tNumbers_Vector); > private > type tNumbers is record > n1 : Integer := 0; > n2 : Integer := 0; > end record; > > subtype tNumbers_Index is Natural; > package pNumbers_Vector is new Ada.Containers.Vectors (tNumbers_Index, tNumbers); > type tNumbers_Vector is new pNumbers_Vector.Vector with null record; > end Numbers; > > ============================================================ > > Numbers.adb: > with Ada.Text_IO; use Ada.Text_IO; > > package body Numbers is > Numbers_List : tNumbers_Vector; > function New_Record(n1 : Integer; n2 : Integer) return tnumbers is > theRecord : tnumbers := (n1, n2); > begin > return theRecord; > end New_Record; > > -- ---------------------------------------------------------------------------------------------------- > > procedure Print_Numbers_Data (Numbers_Vector : tNumbers_Vector) is > > procedure Show_Two_Numbers(Number_Index : tNumbers_Index) is > aNumber_Record : tnumbers; > begin > aNumber_Record := Numbers_Vector.Element(Number_Index); > Put("Number 1: " & Integer'image(aNumber_Record.n1)); > Put_Line(" Number 2: " & Integer'image(aNumber_Record.n2)); > end Show_Two_Numbers; > > begin > Numbers_Vector.Iterate(Show_Two_Numbers'Access); > end Print_Numbers_Data; > > -- ---------------------------------------------------------------------------------------------------- > > begin > for index in Natural range 0..3 loop > Numbers_List.Append(New_Record(index + 2, 2* index + 1)); > end loop; > end Numbers; >