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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error con sobrecarga de Ostream
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error con sobrecarga de Ostream  (Leído 3,504 veces)
progTata

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Error con sobrecarga de Ostream
« en: 1 Abril 2011, 16:30 pm »

Hola Gente! Pues, soy nuevo en el foro y estoy haciendo una carrera de programador en la que nos enseñan C++. Tenemos que crear una clase llamada "Fecha" que tiene los valores privados dia, mes, año. hay que sobrecargar el operador "<<" para que muestres correctamente la fecha, algo asi "dd/mm/aaaa". aqui esta el codigo

Código:
//Fecha.h

class Fecha
          {     
           private:
                   int dia;
                   int mes;
                   int año;
           public:
                  Fecha();                      //Constructor por defecto
                  Fecha(int d, int m, int a);
                  void setDia(int d);
                  void setMes(int m);
                  void setAnio(int a);
                  int getDia();
                  int getMes();
                  int getAnio();
                  ostream &operator << (ostream o, Fecha f);
                  };

ahora el .cpp

Código:
// main.cpp

#include "Fecha2.h"
#include <iostream.h>
#include <stdio.h>
#include <conio.h>

ostream &operator << (ostream &o, Fecha &f)
{   int a, m, d;
    a = f.getDia();
    m = f.getMes();
    d = f.getDia();
    o << d << "." << m << "." << a;
    return o;
}
       
int main()
{Fecha fecha1;
 int a, m, d, o;
 cout<<"Ingresar Fecha: ";
 cin>>d;
 cin>>m;
 cin>>a;
 fecha1.setDia(d);
 fecha1.setMes(m);
 fecha1.setAnio(a);
 cout<<"1. Mostrar mediante funcion\n";
 cout<<"2. Mostrar comun\n";
 cin>>o;
 if( o == 1)
     {cout<<fecha1;}
 if( o == 2)
     {cout<<fecha1.getDia();
      cout<<".";
      cout<<fecha1.getMes();
      cout<<".";
      cout<<fecha1.getAnio();}
 getch();
 
}

NOTA: El "mostrar comun" lo hice para comprobar que la fecha esté guardada correctamente como metodo seguro.

Estoy usando Dev C++ 4.9.9.2 con MinGW 3.4.2

errores que me da:

3 C:\Users\*usuario*\Desktop\Programación\lab2.cpp In file included from C:\Users\*usuario*\Desktop\Programación\lab2.cpp
18 C:\Users\*usuario*\Desktop\Programación\Fecha2.h ISO C++ forbids declaration of `ostream' with no type
18 C:\Users\*usuario*\Desktop\Programación\Fecha2.h expected `;' before '&' token

Espero me puedan dar una mano, soy un tanto nuevo en esto jeje. Gracias de antemano!


En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Error con sobrecarga de Ostream
« Respuesta #1 en: 1 Abril 2011, 18:56 pm »

No puedes retornar 0 a un stream. Tu sobrecarga del operador << es:
Código
  1. ostream &operator << (ostream o, Fecha f);

Por tanto, no puedes hacer un return 0 al ifnal de la sobrecarga. Has de retornar el ostream " o " en tu caso.

Por otro lado, tienes un lio de includes ahí:

Si defines la clase fecha en fecha.h, lo normal sería implementarla en fecha.cpp, no en el main. Por tanto, lo "ideal" sería: main.cpp (o el nombre que sea), fecha.h, fecha.cpp. Fecha .cpp no hace falta que lo incluyas en el código, sino en la compilación.

Por otro lado, si declaras un ostream en fecha.h, incluye el iostream ahí, y como incluyes fecha.h en fecha.cpp, iostream estará también incluida en fecha.cpp

iostream.h es una cabecera obsoleta, se incluye como iostream a secas, sin la h. stdio.h es la cabecera para stdio de C, en c++ es cstdio otra vez sin la h.


EJEMPLO:
Código
  1. #ifndef fecha_H_INCLUDED
  2. #define fecha_H_INCLUDED
  3. //fecha.h
  4. #include <iostream>
  5. #include <cstdio>
  6.  
  7. //declaración de la clase y métodos
  8.  
  9. #endif // final del define de fecha_H_INCLUDED .
  10. //Esto se hace para evitar tener la misma librería incluida varias veces
  11.  

Código
  1. //fecha.cpp
  2. #include fecha.h
  3.  
  4. //implementación de los métodos

Código
  1. //main
  2.  
  3. #include fecha.h
  4.  

conio.h es una cabecera totalmente innecesaria y obsoleta: http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html



« Última modificación: 1 Abril 2011, 19:05 pm por Akai » En línea

progTata

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Error con sobrecarga de Ostream
« Respuesta #2 en: 6 Abril 2011, 22:55 pm »

Gracias por la ayuda!! Eso fue lo que estaba necesitando. Con respecto a los fecha.cpp y eso tienes razón, sólo que esta vez estoy trabajando en gurpo y decidimos hacerlo asi, recien estamos empezando con el tema. Gracias por tu tiempo y un abrazo!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
usando sobrecarga de metodos
Java
Rijhording 3 3,450 Último mensaje 28 Abril 2010, 00:09 am
por b10s_0v3rr1d3
Sobrecarga de ram
Dudas Generales
animalx3 1 2,822 Último mensaje 25 Junio 2010, 00:36 am
por maxx93
Duda con sobrecarga de operador ( )
Programación C/C++
Akai 6 4,362 Último mensaje 16 Noviembre 2010, 14:53 pm
por Akai
sobrecarga de operador<<
Programación C/C++
adam96 5 4,269 Último mensaje 17 Diciembre 2010, 19:10 pm
por Littlehorse
No puedo sobrecargar el operador ostream
Programación C/C++
ElRodrik 5 2,567 Último mensaje 28 Mayo 2015, 04:07 am
por Peregring-lk
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines