Título: Funciones Friends y Namespaces.. Publicado por: digimikeh en 1 Marzo 2019, 00:16 am Hola!
Me parece extraño que tenga que definir una función friend anteponiendo el espacio de nombre si se supone que lo dejé estipulado al principio: Código
Código
En cambio, si lo hago asi: Código
Tenía entendido que si yo escribía "using namespace X", no era necesario llamar a los miembros de un objeto usando X:: , pero en este caso del friend no se cumple, por qué será? Gracias.. Título: Re: Funciones Friends y Namespaces.. Publicado por: K-YreX en 1 Marzo 2019, 00:40 am Esto es porque estás declarando el prototipo de la función <f_obtenerEdad()> dentro del <namespace Agenda> pero la implementación de la función lo estás haciendo fuera; lo que sea hace confuso.
Para que funcione correctamente debes hacer que tanto el prototipo como la implementación pertenezcan al <namespace Agenda>. Código
Al hacerlo en ficheros separados debes especificar que la implementación también pertenece al <namespace Agenda> por eso que tienes que ponerlo para que funcione. Puedes leer un poco más al respecto AQUÍ (https://stackoverflow.com/questions/44749878/warning-defining-friend-operator-declared-inside-a-namespace) :-X Título: Re: Funciones Friends y Namespaces.. Publicado por: digimikeh en 1 Marzo 2019, 01:21 am Pero por lo visto esto solo sucede con las funciones amigas verdad?
Título: Re: Funciones Friends y Namespaces.. Publicado por: K-YreX en 1 Marzo 2019, 01:44 am No, he probado a crear una función simple para probar y te dejaré por aquí el código y las salidas que genera.
Código
La salida para este caso es un error de compilación: Código: En la función `main': Este error se puede solucionar añadiendo el <namespace Agenda> a la implementación de la función tal que: Código
En cambio, si ponemos la función dentro del <namespace>... Código
La salida en este caso sí es la correcta: Código: Salida: 5 Título: Re: Funciones Friends y Namespaces.. Publicado por: digimikeh en 1 Marzo 2019, 02:33 am Ok, pero ahí estas declarando una funcion fuera de la clase, yo decía lo de friend porque se declara dentro de la clase, aunque no sea miembro.
Título: Re: Funciones Friends y Namespaces.. Publicado por: Loretz en 1 Marzo 2019, 05:03 am En tu ejemplo, la declaración de f_obtenerEdad() y su definición son distintas (en otros bares podrían decirte que es más respetuoso poner ejemplos que compilen).
Yo veo dos cosas, una es que las formas habituales de definir una función friend son 1) "inline", directamente en el cuerpo de la clase, y 2) en un archivo cpp, ampliando el mismo namespace. (Abajo pongo esta alternativa). La otra es que puedes tener dos funciones (sobrecarga) con la misma firma, una friend en el mismo namespace de la clase, y otra no friend y global, y en este caso con using namespace... el compilador no sabría a cuál de las dos te refieres. Acá abajo va un ejemplo: Código
Título: Re: Funciones Friends y Namespaces.. Publicado por: digimikeh en 2 Marzo 2019, 02:14 am Me queda claro, gracias a ambos.. :rolleyes:
|