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.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,1f0bebbd5edf4a6f X-Google-Attributes: gid103376,public From: Stephen Leake Subject: Re: Please help a newbie with Booch/Ada. Date: 1998/08/21 Message-ID: #1/1 X-Deja-AN: 383436031 References: <35DCCE3A.9EAE78D8@pacbell.net> Organization: NASA Goddard Space Flight Center -- Greenbelt, Maryland USA Newsgroups: comp.lang.ada Date: 1998-08-21T00:00:00+00:00 List-Id: Lengyel Sandor writes: > I am fooling around with the Booch components, since I think > "Collections" are very usefull. good idea. > PACKAGE String_References IS > TYPE String_ptr IS ACCESS ALL String; > TYPE Const_String_Ptr IS ACCESS CONSTANT String; > END String_References; > > > Then I created a root_string_container.ads as: > > with Bc.Containers; > with String_References; > package Root_String_Container is new Bc.Containers > (String,String_References.String_ptr); > > > (Coping the format of root_container.ads. :-) ) > > When I run a semanric check on this later code, I get the following > message. > > root_string_container.ads:4:08: actual for "Item" must be a definite > subtype. See RM 3.3 (23). Basically, an indefinite type is any unconstrained type (in this case, String is an unconstrained array). A definite type is a constrained type. The problem is that the Ada 95 Booch components are modeled after the C++ Booch components. Since there is no such thing as an "indefinite type" in C++, the Ada 95 Booch components restrict you to definite types. This is one of the advantages of Ada 95 over C++; you can give more information about the type. On the other hand, a careless library author can shoot you down. As a work around, you can use Ada.Strings.Unbounded.Unbounded_String instead of String. Better would be to fix the Ada 95 Booch components to allow indefinite types. Find the declaration of Bc.Containers, and add "(<>)" as a discriminant to the object type. Be aware this might break lots of stuff; I haven't tried it. -- Stephe