Eine friend-function ansprechen?
-
Hi,
Also ich will mit einem Klick auf einer Schaltfläche (gehört zur "Klasse2") eine Funktion "protected_fct" ausführen.
Diese Funktion befindet sich in der "Klasse1" und ist als protected dort deklariert:
class Klasse1
{
...
protected:
void protected_fct ();
...
};Ich habe diese Funktion in der "Klasse2" wo ich sie benutzen möchte als freind deklariert:
class Klasse2
{
...
public:
friend void protected_fct ();
...
};Die Frage ist nun wie kann ich im Code meiner Schaltfläche die "protected_fct()" ansprechen?
mit: Klasse1.protected_fct(); hat es nicht geklapt :p ???So, ich hoffe dass mir hier geholfen wird und dafür kriegt ihr den besten Dank der Welt

-
Du hast das friend falsch herum angewendet - mit dieser Konstruktion erhält eine globale Funktion 'protected_fct()' Zugriff auf die private/protected Elemente vom Klasse2. Was du (vermutlich) brauchst, sieht so aus:
class Klasse2 { public: void accessor(); ... }; class Klasse1 { public: ... friend Klasse2; //oder friend void Klasse2::accessor(); protected: void protected_fct (); ... };(Den Zugriff nur auf einzelne Elemente/Methoden beschränken geht nicht - wenn friend, dann komplett)
PS: Das hat aber wenig mit MFC zu tun.
-
Dieser Thread wurde von Moderator/in CStoll aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ok, aber in dem Code der Schaltfläche (mit dem Klassenassistent) wie kann ich denn die protected_fct() aufrufen?
Ich habe jetzt inclass Klasse2 { protected: void fct_aufrufen(); ... }; class Klasse1 { public: ... friend void Klasse2::fct_aufrufen(); protected: void protected_fct (); ... }; ... void fct_aufrufen(){ Klasse1.protected_fct (); //So funktioniert es leider nicht??? }
-
Du mußt dir irgendwo auch ein Objekt besorgen, dessen Methode du aufrufen willst (jede nicht-statische Methode benötigt einen this-Zeiger):
void Klasse2::fct_aufrufen() { Klasse1 ob1; ob1.protected_fct(); }(eventuell kannst du das Objekt auch als Element von Klasse2 anlegen oder beliebig herumreichen - hängt davon ab, wo du es brauchst)
-
Mal philsophisch ausgedrückt:
- Die Klasse, die "sich offenbaren" will, muss angeben, wen sie "sehen lassen" möchte. Es kann nicht eine Klasse2 entscheiden, dass sie gerne in Klasse1s "privates" schauen will. ("friend" = "Genehmigung in meine privates zu gucken")
-
void fct_aufrufen(){
....protected_fct (); //So funktioniert es leider nicht???}
Wen willst Du "protected_fct-en" ? Konkret arbeitet man nicht mit Klassen, sondern mit Objekten, deren Layout man in einer Klasse festlegt. Gruß, Simon2.