Freigeben über


Friend-Deklarationen

Wenn Sie eine Friend-Funktion deklarieren, die zuvor nicht deklariert wurde, wird diese Funktion in den einschließenden Nichtklassenbereich exportiert.

Die Funktionen, die in einer Friend-Deklaration deklariert sind, werden so behandelt, als ob sie mithilfe des extern-Schlüsselworts deklariert worden wären. (Weitere Informationen zu extern finden Sie im Artikel über statische Speicherklassenspezifizierer).

Obwohl Funktionen mit globalem Gültigkeitsbereich als Friends vor ihrem Prototypen deklariert werden können, können Memberfunktionen nicht als Friends vor der Darstellung ihrer vollständigen Klassendeklaration deklariert werden. Der folgende Code zeigt, warum hierbei ein Fehler auftritt:

class ForwardDeclared;   // Class name is known.
class HasFriends
{
    friend int ForwardDeclared::IsAFriend();   // C2039 error expected
};

Im vorhergehenden Beispiel wird der Klassenname ForwardDeclared in den Bereich eingegeben. Die vollständige Deklaration (besonders der Teil, in der die Funktion als IsAFriend deklariert wird) ist jedoch nicht bekannt. Daher wird von der friend-Deklaration in der Klasse HasFriends ein Fehler generiert.

Um zwei befreundete Klassen zu deklarieren, muss die gesamte zweite Klasse als Friend der ersten Klasse angegeben werden. Diese Einschränkung besteht, weil der Compiler über genügend Informationen verfügt, um einzelne Friend-Funktionen nur an der Stelle zu deklarieren, in der die zweite Klasse deklariert wird.

Hinweis

Obwohl die gesamte zweite Klasse Friend der ersten Klasse sein muss, können Sie auswählen, welche Funktionen in der ersten Klasse Friends der zweiten Klasse sind.

Siehe auch

Referenz

Friend (C++)