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 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,e01befd2b86cac20 X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news2.google.com!fu-berlin.de!uni-berlin.de!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: problems with classes Date: Fri, 1 Oct 2004 09:35:19 +0200 Message-ID: <1c2igmxqnybiz.50giqp9woi08$.dlg@40tude.net> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: news.uni-berlin.de 9uESMKbGpEUIzSzU65IIrgEgV0WfsWzUOReuZ88Fde+/lv/ms= User-Agent: 40tude_Dialog/2.0.12.1 Xref: g2news1.google.com comp.lang.ada:4488 Date: 2004-10-01T09:35:19+02:00 List-Id: On Thu, 30 Sep 2004 23:20:47 +0200, Rick Santa-Cruz wrote: > First of all I wanna thank all people in this group for the help. I am just > a beginner in Ada and before I started Ada, I thought that cause I know C++ > very well, it would be easy for me to understand Ada (in fact I made this > experience with learning programmin languages like Java, Perl, C#, etc. > after working a lot with C++). But this assumption was totally wrong. The > syntax of Ada seems to me a bit strange, at least at the moment ;), but I am > working hard to become better in Ada... > > Here are 2 examples of source-codes: > 1. Source1: > package Source_1 is > type Parent_Class is tagged > record > Number: Integer; > end record; > type Child_Class is new Parent_Class with private; > > procedure Parent_Proc(P: Parent_Class); > procedure Child_Proc(C: Child_Class); > > private > type Child_Class is new Parent_Class with > record > Number2: Integer; > end record; > end Source_1; > --------------------------------------------------------------------- > 1. Source2: > package Source_2 is > type Parent_Class is tagged > record > Number: Integer; > end record; > type Child_Class is new Parent_Class with > record > Number2: Integer; > end record; > > procedure Parent_Proc(P: Parent_Class); > procedure Child_Proc(C: Child_Class); > end Source_2; > > My question is now, why in the seconde code-example I get an error, that > Parent_Class has to be declared ready, before I define the Child_Class? Why > I don't get this error in the first case, cause there I specify the > Child_Class with: "type Child_Class is new Parent_Class with private;", > before I declare the procedure of the class Parent_Class? In the first case the type Child_Class is not fully defined at the declaration point of Parent_Proc. In the second case it is, which in effect freezes Parent_Class, so that Parent_Proc cannot be declared as a primitive operation. You can modify Source_2 as follows: package Source_2 is type Parent_Class is tagged record Number: Integer; end record; procedure Parent_Proc(P: Parent_Class); -- Before freezing point, now type Child_Class is new Parent_Class with record Number2: Integer; end record; procedure Child_Proc(C: Child_Class); end Source_2; > If this would be C++, I think I would know the answer... so in C++ > "something like this" exists, too. It is called pre-definition of a type. > That means that, for example if I need the name of a type before I wanna > specify it, I can just write: > class MyType; and specify it later. Is this the case in Ada too? Close, but not quite. In your example you define the public view of a type and later define its implementation. What you meant is a forward type declaration, it looks exactly like in C++: type Something; -- Forward declaration -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de