🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.c++
4 messages
4 total messages Started by Uwe Tantz Wed, 29 Nov 1995 13:15
Frage zu forward-Deklarationen
#910
Author: Uwe Tantz
Date: Wed, 29 Nov 1995 13:15
34 lines
1226 bytes
Gruess Euch,

ich haette ein Problem zu forward-Deklarationen:
Weiss jemand, ob es moeglich ist, *eingebettete* Klassen forward zu 
deklarieren? Was mir dabei vorschwebt ist etwa folgendes:

-- Header-File
class A
{
  public:
  class B;

  // in der Deklaration von A werden nur B-Pointer und -Referenzen gebraucht
  void foo(B &x); 
};

-- Implementation
class A::B
{
  // ... usw.
};

void A::foo(B &x)
{
  // ... usw.
}

Dieses wird aber so von keinem mir bekannten Compiler geschluckt. Weiss 
jemand, ob es dafuer einen Grund gibt? Ich faende dies eine sinnvolle 
Konstruktion. Wenn man B im globalen Scope definiert, klappts ja auch.

Tschuess, Uwe

uwe.tantz@physik.uni-regensburg.de
Re: Frage zu forward-Deklarationen
#926
Author: Karl-Heinz Krause
Date: Thu, 30 Nov 1995 06:06
40 lines
1603 bytes
Am 29. Nov. 1995 schrieb Uwe Tantz
(c4037@rphc1.physik.uni-regensburg.de>):

> Gruess Euch,

> ich haette ein Problem zu forward-Deklarationen:
> Weiss jemand, ob es moeglich ist, *eingebettete* Klassen forward zu 
> deklarieren? Was mir dabei vorschwebt ist etwa folgendes:

> -- Header-File
> class A
> {
>   public:
>   class B;

>   // in der Deklaration von A werden nur B-Pointer und -Referenzen gebraucht
>   void foo(B &x); 
> };

> -- Implementation
> class A::B
> {
>   // ... usw.
> };

> void A::foo(B &x)
> {
>   // ... usw.
> }

> Dieses wird aber so von keinem mir bekannten Compiler geschluckt. Weiss 
> jemand, ob es dafuer einen Grund gibt? Ich faende dies eine sinnvolle 
> Konstruktion. Wenn man B im globalen Scope definiert, klappts ja auch.

Die Konstruktion ist nach dem neuesten C++-Standard zulässig. Sie wird
in "The Design and Evolution of C++" ausdrücklich erwähnt. Ältere
C++-Compiler können es aber noch nicht. (Bei Borland C++ V. 4.5 geht's)


Karl-Heinz Krause
Re: Frage zu forward-Deklarationen
#927
Author: Bernd Eggink
Date: Fri, 01 Dec 1995 10:19
45 lines
1586 bytes
Uwe Tantz (c4037@rphc1.physik.uni-regensburg.de) wrote:
>  Gruess Euch,

>  ich haette ein Problem zu forward-Deklarationen:
>  Weiss jemand, ob es moeglich ist, *eingebettete* Klassen forward zu 
>  deklarieren? Was mir dabei vorschwebt ist etwa folgendes:

>  -- Header-File
>  class A
>  {
>    public:
>    class B;

>    // in der Deklaration von A werden nur B-Pointer und -Referenzen gebraucht
>    void foo(B &x); 
>  };

>  -- Implementation
>  class A::B
>  {
>    // ... usw.
>  };

>  void A::foo(B &x)
>  {
>    // ... usw.
>  }

>  Dieses wird aber so von keinem mir bekannten Compiler geschluckt. Weiss 
>  jemand, ob es dafuer einen Grund gibt? Ich faende dies eine sinnvolle 
>  Konstruktion. Wenn man B im globalen Scope definiert, klappts ja auch.


Die Konstruktion ist nach dem Standard erlaubt. Die Compiler sind bloss
noch nicht so weit.

Gruss
	Bernd 

--
+----------------------------------+
|          Bernd Eggink            |
|    Rechenzentrum Uni Hamburg     |
| admin@rzaix13.rrz.uni-hamburg.de |
+----------------------------------+
Re: Frage zu forward-Deklarationen
#944
Author: Karl-Heinz Krause
Date: Mon, 04 Dec 1995 06:13
28 lines
1528 bytes
Am 2. Dez. 1995 schrieb Martin Aupperle (100754.2730@compuserve.com):

> Ich habe leider auf die Schnelle etwas übersehen:

> >void A::foo(B &x)
> >{
> >  // ... usw.
> >}

> ist falsch (oder zumindest nicht ganz richtig - hängt vom Stand des
> Compilers ab). 
> In der Parameterliste befindet man sich noch NICHT im Scope von A.
> Typen müssen daher voll qualifiziert werden, d.h. für B muß es A::B
> heißen. 

Nein, das ist nicht falsch. Die Formalparameterliste einer
Memberfunktionsdefinition gehört sehr wohl zum Scope der Klasse. (Alles
andere wäre auch nicht sinnvoll.)

> Das Problem gab's mit Uralt-Compilern nicht, da dort geschachtelte
> Typen immer globalen Scope hatten - eine Qualifizierung war deshalb
> nicht notwendig. Warum allerdings BC 4.5 das Original ohne Warnung
> schluckt, bleibt unklar. 

Der Borland-Compiler verhält sich hier genau richtig.


Karl-Heinz Krause
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads