Partager via


Déclarations friend

Si vous déclarez une fonction friend qui n'a pas été déclarée précédemment, cette fonction est exportée vers la portée englobante sans classe.

Les fonctions déclarées dans une déclaration friend sont traitées comme si elles avaient été déclarées avec le mot clé extern. Pour plus d'informations sur extern, consultez Spécificateurs statiques de classe de stockage.)

Bien que les fonctions avec une portée globale puissent être déclarées comme friends avant leurs prototypes, les fonctions membres ne peuvent pas être déclarées comme friends avant l'apparition de leur déclaration de classe complète. L'exemple de code suivant montre pourquoi cette opération échoue :

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

L'exemple précédent entre le nom de classe ForwardDeclared dans la portée, mais la déclaration complète (plus spécifiquement, la partie qui déclare la fonction IsAFriend) n'est pas connue. Par conséquent, la déclaration friend dans la classe HasFriends génère une erreur.

Pour déclarer deux classes qui sont friends l'une de l'autre, la deuxième classe entière doit être spécifiée comme friend de la première classe. La raison de cette restriction est que le compilateur a suffisamment d'informations pour déclarer les fonctions friend uniquement au point où la deuxième classe est déclarée.

Notes

Bien que la deuxième classe entière doive être friend de la première classe, vous pouvez sélectionner les fonctions de la première classe qui sont friends de la deuxième classe.

Voir aussi

Référence

friend (C++)