Udostępnij za pośrednictwem


Deklaracje funkcji friend

Podczas deklarowania funkcji zaprzyjaźnionej, która nie została wcześniej zadeklarowana, ta funkcja jest eksportowana do zakresu, który nie jest klasą.

Funkcje zadeklarowane w deklaracji zaprzyjaźnionej są traktowane tak, jakby zostały zadeklarowane, za pomocą słowa kluczowego extern. (Aby uzyskać więcej informacji dotyczących extern, zobacz Specyfikatory statycznych klas magazynowania.)

Chociaż funkcje o zakresie globalnym mogą być deklarowane, jako zaprzyjaźnione przed ich prototypami, elementów członkowskich funkcji nie można zadeklarować, jako zaprzyjaźnionych przed pojawieniem się ich kompletnej deklaracji klasy.W poniższym kodzie pokazano dlaczego to się nie powiedzie:

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

Poprzedni przykład wstawia nazwę klasy ForwardDeclared do zakresu, ale pełnej deklaracji — w szczególności, fragment, który deklaruje funkcję IsAFriend — nie jest znany.W związku z tym, deklaracja friend w klasie HasFriends generuje błąd.

Aby zadeklarować dwie klasy, które są zaprzyjaźnione nawzajem, cała druga klasa musi być określona, jako zaprzyjaźniona klasy pierwszej.Przyczyną tego zawężenia jest kompilator, który ma wystarczająco dużo informacji, aby zadeklarować funkcję zaprzyjaźnioną tylko w miejscu gdzie zadeklarowana jest druga klasa.

[!UWAGA]

Chociaż całej druga klasa musi być zaprzyjaźniona z pierwszą klasą, można wybrać, które funkcje w pierwszej klasie będą zaprzyjaźnione z drugą klasą.

Zobacz też

Informacje

friend (C++)