Friendklassen
-
Warum funktioniert:
[code] class e { private: int privattr; class g { public: void setprivattr(e objekt, int a) { objekt.privattr = a; } }; friend class g; }; [/code]
Dies aber nicht:
[code] class e { private: int privattr; friend class g; class g { public: void setprivattr(e objekt, int a) { objekt.privattr = a; //cannot access private members declared in class e } }; }; [/code]
ALso, warum muss die Friend-Deklaration nach der Klassendeklaration stehen?
-
Eigentlich ist überhaupt kein friend notwendig, wenn eine innere Klasse auf Member der äußeren zugreifen möchte.
-
doch! wenn sie private sind schon!
-
chrigi schrieb:
doch! wenn sie private sind schon!
Selbst dann nicht.
-
Du kannst imho nicht einen friend setzen, der danach erst definiert wird.
-
chrigi schrieb:
doch! wenn sie private sind schon!Selbst dann nicht.
DOCH!!! zumindest beim msvc6 lassen sich private membervariablen der äusseren klasse nicht durch die innere klasse referenzieren!
-
Ok, im Standard selbst ist es nicht drin, aber es wurde als ein Fehler erkannt und man hat einen Defect Report gemacht:
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#45
GCC implementiert das Verhalten entsprechend dem Defect Report.
-
chrigi schrieb:
chrigi schrieb:
doch! wenn sie private sind schon!Selbst dann nicht.
DOCH!!! zumindest beim msvc6 lassen sich private membervariablen der äusseren klasse nicht durch die innere klasse referenzieren!
wer den msvc6 als maß der dinge nimmt, hat eh verloren.
-
Danke für die schnelle Hilfe!!
-
wer den msvc6 als maß der dinge nimmt, hat eh verloren.
wer spricht denn vom mass der dinge?!?
-
chrigi schrieb:
wer den msvc6 als maß der dinge nimmt, hat eh verloren.
wer spricht denn vom mass der dinge?!?
DOCH!!! zumindest beim msvc6...
das spielt doch schon sehr stark in diese richtung