elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  No puedo sobrecargar el operador ostream
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No puedo sobrecargar el operador ostream  (Leído 1,706 veces)
ElRodrik

Desconectado Desconectado

Mensajes: 30


Ver Perfil
No puedo sobrecargar el operador ostream
« en: 26 Mayo 2015, 13:32 pm »

Buenas. He declarado en un archivo "Partit.h" las clases y ahora en el archivo ".cpp" me sale el error "expected initializer before '&' token". Para escribir el programa estoy usando el Dev.
El código es el siguiente:

#include <Partit.h> //éste es el archivo donde tengo las clases declaradas

#include <iomanip>
#include <iostream>
using namespace std;

CPartit
CPartit::ostream& operator<< (ostream& os, const CPartit&) //el error sale en el primer "&" de ésta línea
{
os << local << gols_local << ':' << visitant << gols_visitant;
return os;
}


En línea

Peregring-lk

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: No puedo sobrecargar el operador ostream
« Respuesta #1 en: 26 Mayo 2015, 17:25 pm »

Has puesto la resolución de ámbito mal:

Código
  1. #include <Partit.h> //éste es el archivo donde tengo las clases declaradas
  2.  
  3. #include <iomanip>
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. ostream& CPartit::operator<<(ostream& os, const CPartit&)
  8. {
  9.    os << local << gols_local << ':' << visitant << gols_visitant;
  10.    return os;
  11. }


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: No puedo sobrecargar el operador ostream
« Respuesta #2 en: 27 Mayo 2015, 20:42 pm »

¡Buenas!

Para sobrecargar operadores cuyo operando mas a la izquierda no es un miembro de la clase tienes que declararlos como friend, no como miembros de la clase, ya que en este ultimo caso se espera que el operando mas a la izquierda sea del tipo de la clase.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Peregring-lk

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: No puedo sobrecargar el operador ostream
« Respuesta #3 en: 27 Mayo 2015, 21:10 pm »

Eso no es cierto. Un operador o una función se hacen friend[/i] cuando:

  • El operador o función debe ser externo a la clase por la cuestión que sea.
  • El operador o función, además, necesita acceder a los datos privados de la clase.

Y no por el sencillo hecho de ser "un operador cuyo operando más a la izquierda no es un miembro de la clase". Un operador se podría hacer externo a la clase, "cuyo operando más a la izquierda ES un miembro de la clase", sencillamente para permitir conversiones implícitas.

Si no necesitas acceder a los datos privados, puedes hacer tu operador externo a la clase sin problemas, tal y como he puesto (aunque no sé qué son `local`, ni `gols_local`, ni `visitant`; asumo que subobjetos de un partido --es obvio; pero como no lo ha explicado, pues lo he dejado "tal cuál"; me he centrado en la sintáxis; si son datos privados, que sustituya su acceso mediante métodos lectores o que la haga friend como bien dices).
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: No puedo sobrecargar el operador ostream
« Respuesta #4 en: 28 Mayo 2015, 03:30 am »

Eso no es cierto. Un operador o una función se hacen friend[/i] cuando:

  • El operador o función debe ser externo a la clase por la cuestión que sea.
  • El operador o función, además, necesita acceder a los datos privados de la clase.

Y no por el sencillo hecho de ser "un operador cuyo operando más a la izquierda no es un miembro de la clase". Un operador se podría hacer externo a la clase, "cuyo operando más a la izquierda ES un miembro de la clase", sencillamente para permitir conversiones implícitas.

A ver si aprendemos a leer. He dicho que si el operador mas a la izquierda no es un objeto de la clase (y evidentemente el operador tiene que acceder a los miembros privados, como el mismo está intentando hacer (no hace falta tener muchas luces para darse cuenta)) entonces tiene que declararlo como friend y un operador miembro "puro", no friend, exige que su operando mas a la izquierda sea un objeto de la clase. Y esto, lo mires como lo mires, es cierto siempre. Otra cosa es que haya más casos en los que un operador/funcion se pueda declarar friend, o que pueda aceptar como primer operando un objeto de la clase, pero lo que he dicho es completamente cierto.

Primero lee, luego entiende y cuando hayas hecho todo lo anterior reflexiona antes de opinar sobre lo que ha dicho otra persona, sobre todo si pretendes desacreditarla, no vaya a ser que acabes pillándote los dedos.

¡Saludos!
« Última modificación: 28 Mayo 2015, 03:32 am por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Peregring-lk

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: No puedo sobrecargar el operador ostream
« Respuesta #5 en: 28 Mayo 2015, 04:07 am »

Pero no te enfades xD (sé que en realidad no te enfadas). Y perdona, a veces soy muy precipitado... cosas del dormir poco.
« Última modificación: 28 Mayo 2015, 04:17 am por Peregring-lk » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error con sobrecarga de Ostream
Programación C/C++
progTata 2 2,823 Último mensaje 6 Abril 2011, 22:55 pm
por progTata
Sobrecargar el operador <<
Programación C/C++
<<<-Basura->>> 4 1,316 Último mensaje 11 Junio 2013, 22:38 pm
por <<<-Basura->>>
Problema operador asignación y operador asignación [struct] c++
Programación C/C++
luiggy2 2 1,852 Último mensaje 16 Octubre 2013, 23:35 pm
por luiggy2
Sobrecargar Operador por defecto de una clase
Programación C/C++
SubAtomicParticula 2 1,042 Último mensaje 2 Agosto 2017, 21:12 pm
por SubAtomicParticula
Problema al sobrecargar el operador +
Programación C/C++
cNoob 8 2,753 Último mensaje 20 Diciembre 2017, 15:24 pm
por cNoob
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines