Declaraciones de confianza
Si declara una función friend que no se declaró previamente, esa función se exporta al ámbito de los nonclass envolvente.
Las funciones declaradas en una declaración friend se tratan como si hubieran sido declaradas mediante la palabra clave de extern .(Para obtener más información sobre extern, vea especificadores estáticos de la clase de almacenamiento.)
Aunque las funciones con ámbito global se pueden declarar como amigos antes de los prototipos, funciones miembro no se pueden declarar como amigos antes del aspecto de la declaración de clase completa.El código siguiente se muestra por qué se produce esto:
class ForwardDeclared; // Class name is known.
class HasFriends
{
friend int ForwardDeclared::IsAFriend(); // C2039 error expected
};
El ejemplo anterior escribe el nombre de clase ForwardDeclared en ámbito, pero la declaración completa (específicamente, la parte que declara la función IsAFriend — no se conoce.Por consiguiente, la declaración de friend en la clase HasFriends genera un error.
Para declarar dos clases que son amigos de sí, la segunda clase completa se debe especificar como friend de primera clase.La razón de esta restricción es que el compilador tiene información suficiente para declarar funciones individuales de confianza sólo en el punto donde se declara la segunda clase.
[!NOTA]
Aunque la segunda clase completa debe ser un confianza a la primera clase, puede seleccionar las funciones de la primera clase se amigos de la segunda clase.