Déclarations friend
Si vous déclarez une fonction friend qui n'a pas été précédemment déclaré, cette fonction est exportée à la portée englobante de nonclass.
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é d' extern .(Pour plus d'informations sur extern, consultez Spécificateurs statiques de la 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'apparence de leur déclaration de classe complète.Voici de code pourquoi en cas de échec :
class ForwardDeclared; // Class name is known.
class HasFriends
{
friend int ForwardDeclared::IsAFriend(); // C2039 error expected
};
L'exemple précédent écrit le nom de classe ForwardDeclared dans la portée, mais la déclaration complète - spécifiquement, la partie qui déclare la fonction IsAFriend - n'est pas connue.par conséquent, la déclaration d' friend dans la classe HasFriends génère une erreur.
Pour déclarer deux classes qui sont des fonctions friend d'une des autres, la deuxième classe entière doit être spécifiée comme fonction friend de première classe.La raison de cette restriction est que le compilateur dispose de suffisamment d'informations pour déclarer des fonctions friend uniquement au point où la deuxième classe est déclarée.
[!REMARQUE]
Bien que la deuxième classe entière doit être une fonction friend à la première classe, vous pouvez sélectionner que les fonctions dans la première classe sont des fonctions friend de la deuxième classe.