🚀 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 Thomas Beck Sun, 25 Feb 1996 01:29
Funktion einer Klasse=Friend einer anderen Klasse?
#1635
Author: Thomas Beck
Date: Sun, 25 Feb 1996 01:29
49 lines
1380 bytes
Hi!

Kann eine Funktion einer Klasse als Friend einer anderen Klasse definiert
werden?
Bei meinem Versuch (rudimentaeres Beispiel folgt) erhalte ich folgende
Fehlermeldung waehrend des Kompilierens:


        friend xyz::g();
                       ^
test.cpp(4) : Error: 'xyz' must be a class name preceding '::'

--- errorlevel 1


Rudimentaeres Beispiel:

class abc {
	int i;
	friend xyz::g();
};

class xyz {
	abc a;
	public:
	void g();
};

void xyz::g() {
	a.i=0;
};

int main() {
	xyz z;
	z.g();
	return 0;
}

Ich waere sehr froh um Hilfe...

Dank und Gruss,

Thomas Beck, tombeck@usemail.com

=================================================================
Summer's day, as she passed away. Birds were singing in the
summer sky; then came the rain, and once again, a tear fell
from her mother's eye...
=================================================================
Re: Funktion einer Klasse=Friend einer anderen Klasse?
#1683
Author: Ralf W. Stephan
Date: Sun, 25 Feb 1996 08:37
14 lines
609 bytes
Hmm, das ist ein Problem, eine Notlösung wäre, die gesamte
Klasse zum friend zu machen:

class abc {
	int i;
	friend class xyz;
};

Aber das muß auch anders gehen...


ralf
--
PGP: 1024/0xA713ECE9 2047/0xC8E605F5
Re: Funktion einer Klasse=Friend einer anderen Klasse?
#1636
Author: Dietmar Kuehl
Date: Sun, 25 Feb 1996 15:46
77 lines
3103 bytes
Hi,
Thomas Beck (tombeck@usemail.com) wrote:
: Kann eine Funktion einer Klasse als Friend einer anderen Klasse definiert
: werden?

Sicher. Allerdings muss die entsprechende Klasse samt Member-Funktion
deklariert sein bevor man sie zu einem 'friend' deklarieren kann:
jemanden, den Du noch nicht kennst, wuerdest Du vermutlich auch nicht
als 'Freund' bezeichnen, oder?

: Bei meinem Versuch (rudimentaeres Beispiel folgt) erhalte ich folgende
: Fehlermeldung waehrend des Kompilierens:

:         friend xyz::g();
:                        ^
: test.cpp(4) : Error: 'xyz' must be a class name preceding '::'

Das ist doch schon ein Hinweis: 'xyz' soll eine Klasse sein, also kann
man 'xyz' ja mal als Klasse deklarieren. Die naechste Fehlermeldung ist
dann was, was einem mitteilt, dass 'g()' kein Member von 'xyz' ist oder
dass 'xyz' noch nicht definiert ist. Ergo: Man muss 'xyz' VOR 'abc'
definieren.  Schade eigentlich, denn damit kann man kein Objekt der
Klasse 'abc' als Member haben, sondern muss sich mit einen Pointer
helfen. Hier ist ein Beispiel fuer zwei Klassen, bei denen die
Memberfunktion der einen ein 'friend' der anderen ist (Namen und
Formatierung leicht geaendert...):

  class ABC; // forward deklaration: 'ABC*' is now a known type
  class XYZ
  {
  private:
    ABC *a_ptr;

    XYZ(XYZ const &);             // generated verion is useless
    XYZ &operator= (XYZ const &); // generated verion is useless

  public:
    XYZ();
    ~XYZ();
    void g();
  };

  class ABC
  {
    friend XYZ::g();
  private:
    int value;
  };

  XYZ::XYZ(): a_ptr(new ABC) {}
  XYZ::~XYZ() { delete a_ptr; }
  void XYZ::g()
  {
    a_ptr->value=0;
  };

  int main()
  {
    XYZ z;
    z.g();
    return 0;
  }

Ob man wirklich eine derart starke Bindung zwischen zwei Klassen haben
will, ist eine andere Frage (es gibt eine zyklische Abhaengigkeit
zwischen 'XYZ' und 'ABC'; "Taming C++", Jiri Soukup, Addison-Wesley,
ist dazu eine aufschlussreiche Literatur) und da stilistische Fragen in
diesem Forum ja anscheinend gelegentlich persoenlich genommen werden,
gehe ich darauf garnicht erst ein (insbesondere, da mir ja wiedermal
das Umfeld nicht bekannt ist; ganz konnte ich es mir dennoch nicht
verkneifen, da zyklische Abhaengigkeiten fuer mich so aehnlich sind wie
frei rumlaufende Pointer; vielleicht etwas schlimmer). Es geht auf
jeden Fall....
--
dietmar.kuehl@uni-konstanz.de
http://www.informatik.uni-konstanz.de/~kuehl
I am a realistic optimist - that's why I appear to be slightly pessimistic
Re: Funktion einer Klasse=Friend einer anderen Klasse?
#1701
Author: Thomas Beck
Date: Tue, 27 Feb 1996 22:46
9 lines
878 bytes
Das Problem ist geloest, danke fuer die Mithilfe! :-)

Thomas Beck, tombeck@usemail.com

=================================================================
Summer's day, as she passed away. Birds were singing in the
summer sky; then came the rain, and once again, a tear fell
from her mother's eye...
=================================================================
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