Share via


Declaraciones friend

Si declara una función friend que no se declaró previamente, esa función se exporta al ámbito de inclusión que no es de clase.

Las funciones declaradas en una declaración friend se tratan como si se hubieran declarado mediante la palabra clave extern. (Para obtener más información sobre extern, vea Especificadores estáticos de clase de almacenamiento).

Aunque las funciones con ámbito global se pueden declarar como friend antes que los prototipos, las funciones miembro no se pueden declarar como friend antes de que aparezca la declaración de clase completa. En el siguiente ejemplo de código se muestra por qué esto produce un error:

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

El ejemplo anterior introduce el nombre de clase ForwardDeclared en el á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 de tipo friend entre sí, la segunda clase completa se debe especificar como friend de la primera clase. La razón de esta restricción se debe a que el compilador solo tiene información suficiente para declarar funciones friend individuales en el punto donde se declara la segunda clase.

Nota

Aunque la segunda clase completa debe ser definirse como friend en la primera clase, puede seleccionar las funciones de la primera clase que se definen como friend para la segunda clase.

Vea también

Referencia

friend (C++)