* Help with Text_IO Instantiation! @ 1996-04-21 0:00 Robert Gelb 1996-04-22 0:00 ` Robert Dewar 1996-04-24 0:00 ` John Herro 0 siblings, 2 replies; 4+ messages in thread From: Robert Gelb @ 1996-04-21 0:00 UTC (permalink / raw) I have the following code: procedure test is type string is array(integer range 1..10) of character; type SaType is array(integer range <>) of string; StrArray:SaType(1..5); begin put(StrArray(1)); end test; What kind of Text_IO instatiation do I need to specify in order to make 'put(StrArray(1));' statement work. I've tried with Ada.Text_Io, Ada.Integer_Text_Io; use Ada.Text_Io, Ada.Integer_Text_Io; but it doesn't seem to work with the type of string I declared. I am using ADA95. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Help with Text_IO Instantiation! 1996-04-21 0:00 Help with Text_IO Instantiation! Robert Gelb @ 1996-04-22 0:00 ` Robert Dewar 1996-04-24 0:00 ` John Herro 1 sibling, 0 replies; 4+ messages in thread From: Robert Dewar @ 1996-04-22 0:00 UTC (permalink / raw) There is no built in Put for user defined string types, you will have to program it yourself. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Help with Text_IO Instantiation! 1996-04-21 0:00 Help with Text_IO Instantiation! Robert Gelb 1996-04-22 0:00 ` Robert Dewar @ 1996-04-24 0:00 ` John Herro 1996-04-24 0:00 ` David Weller 1 sibling, 1 reply; 4+ messages in thread From: John Herro @ 1996-04-24 0:00 UTC (permalink / raw) rgelb@csulb.edu (Robert Gelb) wrote: > type string is array(integer range 1..10) of character; > type SaType is array(integer range <>) of string; > StrArray:SaType(1..5); > begin > put(StrArray(1));. > What kind of Text_IO instatiation do I need to > make 'put(StrArray(1));' work? Robert Dewar's answer is entirely correct, but allow me to add some comments. In writing type string is array(integer range 1 .. 10) of character; you're doing two potentially confusing things which beginners should avoid and even veteran programmers should do very rarely, if at all. First, you've chosen a name, string, which is *already defined* by the Ada language. In doing this, you "hide" the definition of String built into Ada, namely type String is array(Integer range <>) of Character; This is asking for confusion. You don't need to declare type String in your program because it's already defined by the language. Second, you declared a new *type* when it appears that what you want to declare is a *subtype*. Since you use your declaration only in the following line to declare SaType, I think what you meant to do was: subtype String10 is String(1 .. 10); type SaType is array(Integer range <>) of String10; Now your Put statement will work fine, with no instantiations necessary. Incidentally, it's legal to combine the above two lines into one as follows: Type SaType is array(Integer range <>) of String(1 .. 10); Also, note that Ada.Text_IO itself is not generic, but ready-to-use for the type String built into the language. Therefore, Ada.Text_IO itself needs no instantiation. Inside Ada.Text_IO are generic packages for integers, floats, enumeration types, etc. that can be instantiated with approprate user-defined types, but there's no package ready to be instantiated with a user-defined string type, because you would rarely, if ever, want to define your own string type. *Subtypes* of the built-in type String are perfectly OK, and, since subtypes do not create a new type, Ada.Text_IO works fine for them. I hope this helps, and I hope it clears up more confusion than it causes! - John Herro Software Innovations Technology http://members.aol.com/AdaTutor ftp://members.aol.com/AdaTutor ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Help with Text_IO Instantiation! 1996-04-24 0:00 ` John Herro @ 1996-04-24 0:00 ` David Weller 0 siblings, 0 replies; 4+ messages in thread From: David Weller @ 1996-04-24 0:00 UTC (permalink / raw) In article <4llqlg$i49@newsbf02.news.aol.com>, John Herro <johnherro@aol.com> wrote: >rgelb@csulb.edu (Robert Gelb) wrote: >> type string is array(integer range 1..10) of character; >> type SaType is array(integer range <>) of string; >> StrArray:SaType(1..5); >> begin >> put(StrArray(1));. >> What kind of Text_IO instatiation do I need to >> make 'put(StrArray(1));' work? [Good advice from John trimmed...] >ever, want to define your own string type. *Subtypes* of the built-in >type String are perfectly OK, and, since subtypes do not create a new >type, Ada.Text_IO works fine for them. > I hope this helps, and I hope it clears up more confusion than it >causes! >- John Herro >Software Innovations Technology >http://members.aol.com/AdaTutor >ftp://members.aol.com/AdaTutor What John means, of course, is that you want to probably do something like this: procedure sub is subtype Tiny_String is String(1..12); type Tiny_Array is array(integer range <>) of Tiny_String; TA : Tiny_Array(1..10); begin TA(1) := "Ohmygoodness"; put_Line(Ta(1)); end sub; Note that you could not simply declare: type Tiny_Array is array(String) of Tiny_String; Because String is an unconstrained array. -- Visit the Ada 95 Booch Components Homepage: www.ocsystems.com/booch This is not your father's Ada -- lglwww.epfl.ch/Ada ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~1996-04-24 0:00 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 1996-04-21 0:00 Help with Text_IO Instantiation! Robert Gelb 1996-04-22 0:00 ` Robert Dewar 1996-04-24 0:00 ` John Herro 1996-04-24 0:00 ` David Weller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox