• Miércoles 6 de Noviembre de 2024, 11:19

Autor Tema:  que se hace para utlizar stringstream?ver codigo  (Leído 8153 veces)

pacorubio77

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
que se hace para utlizar stringstream?ver codigo
« en: Martes 14 de Octubre de 2008, 18:42 »
0
Hola,a todos,soy nuevo en la programacion a objetos y cuando implemento el siguiente método,si os fijais hay dos formas de hacer lo mismo,a mi me interesa la que pongo opcion 2,pero siempre me da fallo,es necesario incluir alguna libreria? pongo #include<sstream>...entre ellas y me sigue dando error,en concreto este error:

tw@tw-desktop:~/Desktop/poo$ make
g++ -g -Wall -c ./lib/Fecha.cc -I ./include
./lib/Fecha.cc: In member function ‘std::string Fecha::toString() const’:
./lib/Fecha.cc:193: error: el agregado ‘std::stringstream sfecha’ tiene un tipo incompleto y no se puede definir
make: *** [Fecha.o] Error 1

este es mi metodo

string Fecha::toString()const {

   //opcion 1
   string fecha="";
   int resto;
      
   fecha=dia/10 +'0';
   //cout<<fecha<<endl;
   fecha+=dia%10 +'0';
   //cout<<fecha<<endl;

   
   fecha+=mes/10+'0';
   fecha+=mes%10 + '0';
   
   //convertimos el año a string
   fecha+=anyo/1000 +'0';
   resto=anyo%1000;
   fecha+=resto/100+'0';
   resto=resto%100;
   fecha+=resto/10+'0';
   fecha+=resto%10+'0';
   
   /*opcion 2
   stringstream sfecha;



   sfecha << dia << '/' << mes << '/' << anyo << endl;



   // el método str() del objeto stringstream devuelve un string

   // con los datos que contiene el flujo de datos.

   cout << sfecha.str() << endl;
   */

return fecha;
//return sfecha //cuando utilizo la segunda opcion.

Espero ayuda,gracias.

lostshell

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: que se hace para utlizar stringstream?ver codigo
« Respuesta #1 en: Miércoles 15 de Octubre de 2008, 07:35 »
0
agregaste #include <sstream> ??

pacorubio77

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: que se hace para utlizar stringstream?ver codigo
« Respuesta #2 en: Miércoles 15 de Octubre de 2008, 10:05 »
0
lo utilizé ,lo tengo definido.

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: que se hace para utlizar stringstream?ver codigo
« Respuesta #3 en: Miércoles 15 de Octubre de 2008, 10:42 »
0
¿No será que te falta la llave de cierre de "string Fecha::toString()const {"?
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: que se hace para utlizar stringstream?ver codigo
« Respuesta #4 en: Miércoles 15 de Octubre de 2008, 10:44 »
0
pacorubio77: por favor reduci el problema a la minima expresion de codigo compilable (o que solo tenga el error que queres subsanar).

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

pacorubio77

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: que se hace para utlizar stringstream?ver codigo
« Respuesta #5 en: Miércoles 15 de Octubre de 2008, 10:48 »
0
Perdona ,pero no he entendido este ultimo mensaje que me habeis enviado..espero me lo expliqueis..un saludo,espero respuesta.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: que se hace para utlizar stringstream?ver codigo
« Respuesta #6 en: Miércoles 15 de Octubre de 2008, 11:22 »
0
Pon sólo la parte del código que tenga específicamente el problema

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: que se hace para utlizar stringstream?ver codigo
« Respuesta #7 en: Miércoles 15 de Octubre de 2008, 11:28 »
0
No, pone un PROGRAMA COMPLETO que SOLO contenga el problema, que compile excepto por el problema.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

pacorubio77

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: que se hace para utlizar stringstream?ver codigo
« Respuesta #8 en: Miércoles 15 de Octubre de 2008, 11:42 »
0
quieres que ponga todo el programa completo? es que como esta separado por archivos,te paso todo el Fecha.cc,es que tambien tengo fecha.h y el main, o te paso los tres? te lo pregunto antes de enviarte todo,lo que tu me digas hago..vale?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: que se hace para utlizar stringstream?ver codigo
« Respuesta #9 en: Miércoles 15 de Octubre de 2008, 11:53 »
0
A ver, vamos de nuevo, a menos que sea imprescindible no queremos el programa completo (en el que estas trabajando) sino UN PROGRMA completo (para resolver este problema) que sea la MINIMA EXPRESION del problema, compilable excepto por el problema mismo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: que se hace para utlizar stringstream?ver codigo
« Respuesta #10 en: Miércoles 15 de Octubre de 2008, 12:04 »
0
Te está costando hacerte entender  :lol:

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: que se hace para utlizar stringstream?ver codigo
« Respuesta #11 en: Miércoles 15 de Octubre de 2008, 12:20 »
0
Me parece muy obvio lo que pido, al menos yo no quiero estar leyendo todo el codigo que no tenga nada que ver con el problema, quiero ver pura y exclusivamente lo que tenga que ver con el mismo. Y no quiero tener que crear un esqueleto para compilarlo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: que se hace para utlizar stringstream?ver codigo
« Respuesta #12 en: Miércoles 15 de Octubre de 2008, 12:55 »
0
Cita de: "Eternal Idol"
Me parece muy obvio lo que pido, al menos yo no quiero estar leyendo todo el codigo que no tenga nada que ver con el problema, quiero ver pura y exclusivamente lo que tenga que ver con el mismo. Y no quiero tener que crear un esqueleto para compilarlo.

Eso resulta evidente por sí mismo, y es lo menos que debe hacer quien pregunta. Además, a veces, cuando uno intenta aislar el problema... descubre qué estaba haciendo mal. A veces, con constructos complejos, el error ni siquiera viene de la línea en donde el compilador lo detectó, y al aislar el problema nos damos cuenta de por dónde van los tiros.  :D  :good:
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

pacorubio77

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: que se hace para utlizar stringstream?ver codigo
« Respuesta #13 en: Miércoles 15 de Octubre de 2008, 17:24 »
0
Hola,ya he visto que os habeis avalanzado todos contra mi.aqui teneis los tres ficheros

Código: Text
  1. //fchero fecha.h
  2.  
  3. #include<iostream>
  4. #include<ostream>
  5. #include<string>
  6. #include<cstring>
  7. #include<string.h>
  8. #include<ctime>
  9.  
  10. using namespace std;
  11.  
  12.  
  13.  
  14. class Fecha{
  15.  
  16.     private:
  17.         int dia,mes,anyo;  
  18.  
  19.     public:
  20.        
  21.         Fecha();
  22.         Fecha(int d,int m,int a);
  23.         Fecha(const Fecha &f);
  24.         ~Fecha();
  25.         bool setDia(int d);
  26.         bool setMes(int m);
  27.         bool setAnyo(int a);
  28.         int getDia()const;
  29.         int getMes()const;
  30.         int getAnyo()const;
  31.         bool isBisiesto()const;
  32.         void Imprimir(ostream &os)const;
  33.         string toString()const;
  34.        
  35. };
  36.  

--------------------------------------------
Código: Text
  1. #include<iostream>
  2. #include<ostream>
  3. #include<string>
  4. #include<cstring>
  5. #include<string.h>
  6. #include "Fecha.h"
  7. #include<ctime>
  8. #include<sstream>
  9. //#include"Punto.h"
  10. using namespace std;
  11.  
  12. /*
  13. Fecha::Fecha(){
  14.     dia=1;
  15.     mes=2;
  16.     anyo=2000;
  17. }
  18. */
  19. Fecha::~Fecha(){
  20.     dia=-1;
  21.     mes=-1;
  22.     anyo=-1;
  23.  
  24. }
  25.  
  26. Fecha::Fecha(){
  27.  
  28. //fecha y hora del sistema
  29.  time_t ahora=time(0);
  30.  
  31. tm* localtm=localtime(&ahora);
  32. dia=localtm->tm_mday;
  33. mes=localtm->tm_mon+1;
  34. anyo=localtm->tm_year+1900;
  35. /*
  36. //convertir a struct tm para fecha y hora local
  37. tm* localtm=localtime(&ahora);
  38. cout<<localtm->tm_mday <<"/"
  39.     <<localtm->tm_mon+1<<"/"
  40.     <<localtm->tm_year+1900<<endl;
  41. */
  42. }
  43. Fecha::Fecha(const Fecha &f){
  44.     dia=f.dia;
  45.     mes=f.mes;
  46.     anyo=f.anyo;
  47.  
  48. }
  49.  
  50. Fecha::Fecha(int d,int m,int a){
  51.  
  52.     //bool diac,mesc,anyoc;
  53.     if(!setDia(d)){
  54.         dia=-1;
  55.     }
  56.     else{
  57.         dia=d;
  58.  
  59.     }
  60.  
  61.     if(!setMes(m)){
  62.         mes=-1;
  63.     }
  64.     else{
  65.         mes=m;
  66.  
  67.     }
  68.  
  69.     if(!setAnyo(a)){
  70.         anyo=-1;
  71.     }
  72.     else{
  73.         anyo=a;
  74.  
  75.     }
  76.     /*
  77.     dia=d;
  78.     mes=m;
  79.     anyo=a;
  80.    
  81.    
  82.     dia=setDia(d);
  83.     mes=setMes(m);
  84.     anyo=setAnyo(a);
  85.     */
  86. }
  87.  
  88. bool Fecha::setDia(int d){
  89.     bool correcto=false;
  90.         if  ((d>=1)&&(d<=31)){
  91.             correcto=true;
  92.             dia=d;
  93.         }
  94.         else {
  95.             dia=-1;
  96.         }
  97.  
  98. return correcto;
  99. }
  100.  
  101. bool Fecha::setMes(int m){
  102.     bool correcto=false;
  103.         if  ((m>=1)&&(m<=12)){
  104.             correcto=true;
  105.             mes=m;
  106.         }
  107.         else{
  108.             mes=-1;
  109.         }
  110. return correcto;
  111. }
  112.  
  113. bool Fecha::setAnyo(int a){
  114.     bool correcto=false;
  115.         if  (a>0){
  116.             correcto=true;
  117.             anyo=a;
  118.         }
  119.         else{
  120.             anyo=-1;
  121.         }
  122.  
  123. return correcto;
  124. }
  125.  
  126. int Fecha::getDia()const{
  127.  
  128.     return dia;
  129. }
  130.  
  131. int Fecha::getMes()const{
  132.  
  133.     return mes;
  134. }
  135. int Fecha::getAnyo()const{
  136.  
  137.     return anyo;
  138. }
  139.  
  140. void Fecha::Imprimir(ostream &os)const{
  141. Fecha f2;
  142.  
  143. //bool diacorrecto,mescorrecto,anyocorrecto;
  144.  //os<<dia<<"/"<<mes<<"/"<<anyo;
  145. //cout<<endl;
  146. //ahora vamos a validar
  147.     /*
  148.     diacorrecto=f2.setDia(dia);
  149.     mescorrecto=f2.setMes(mes);
  150.     anyocorrecto=f2.setAnyo(anyo);
  151.    
  152.     if((diacorrecto==false)||(mescorrecto==false)||(anyocorrecto==false)){
  153.         os<<"fecha no valida"<<endl;
  154.     }
  155.     else{
  156.         os<<dia<<"/"<<mes<<"/"<<anyo;
  157.     }
  158.     */
  159.  
  160.     if( (dia==-1)||(mes==-1)||(anyo==-1) ){
  161.         os<<"fecha no valida"<<endl;
  162.     }
  163.     else{
  164.         os<<dia<<"/"<<mes<<"/"<<anyo;
  165.     }
  166.  
  167. }
  168.  
  169. string Fecha::toString()const {
  170.     /*
  171.     string fecha="";
  172.     int resto;
  173.        
  174.     fecha=dia/10 +'0';
  175.     //cout<<fecha<<endl;
  176.     fecha+=dia%10 +'0';
  177.     //cout<<fecha<<endl;
  178.  
  179.    
  180.     fecha+=mes/10+'0';
  181.     fecha+=mes%10 + '0';
  182.    
  183.     //convertimos el año a string
  184.     fecha+=anyo/1000 +'0';
  185.     resto=anyo%1000;
  186.     fecha+=resto/100+'0';
  187.     resto=resto%100;
  188.     fecha+=resto/10+'0';
  189.     fecha+=resto%10+'0';
  190.  
  191. */
  192.     stringstream sfecha;
  193.  
  194.  
  195.  
  196. sfecha << dia << '/' << mes << '/' << anyo << endl;
  197.  
  198.  
  199.  
  200. // el método str() del objeto stringstream devuelve un string
  201.  
  202. // con los datos que contiene el flujo de datos.
  203.  
  204. cout << sfecha.str() << endl;
  205. return sfecha;
  206. //return fecha;
  207.  
  208.  
  209. }
  210.  

Código: Text
  1. //este es el main
  2.  
  3. #include<iostream>
  4. #include<ostream>
  5. #include<ctime>
  6. #include "Fecha.h"
  7.  
  8.  
  9. //#include"Punto.h"
  10. using namespace std;
  11.  
  12. int main(){
  13.  
  14. Fecha f1;
  15. int d,m,a;
  16. bool diac,mesc,anyoc;
  17. cout<<"LA FECHA ACTUAL ES "<<endl;
  18. cout<<f1.getDia()<<"/";
  19. cout<<f1.getMes()<<"/";
  20. cout<<f1.getAnyo()<<endl;
  21. cout<<"-------------------------"<<endl;
  22.  
  23.  
  24. cout<<"introduce el dia "<<endl;
  25. cin>>d;
  26. diac=f1.setDia(d);
  27.    
  28.  
  29. cout<<"introduce el mes "<<endl;
  30. cin>>m;
  31. mesc=f1.setMes(m);
  32.  
  33.  
  34.  
  35. cout<<"introduce el año "<<endl;
  36. cin>>a;
  37. anyoc=f1.setAnyo(a);
  38.  
  39.  
  40. //cin>>anyo;
  41.  
  42. cout<<"LA FECHA INTRODUCIDA POR EL USUARIO"<<endl;
  43. /*
  44. cout<<f1.getDia()<<endl;
  45. cout<<f1.getMes()<<endl;
  46. cout<<f1.getAnyo()<<endl;
  47. */
  48.  
  49. string fecha;
  50. cout<<"UTILIZO EL METODO IMPRIMIR"<<endl;
  51. Fecha f(f1.getDia(),f1.getMes(),f1.getAnyo());
  52. f.Imprimir(cout);
  53. cout<<endl;
  54.  
  55. fecha=f.toString();
  56. cout<<"FECHA "<<fecha<<endl;
  57.  
  58.  
  59. f1.~Fecha();
  60.  
  61. //f1.setDia(5);
  62. //cout<<f1.getDia()<<endl;
  63.  
  64.  
  65. }
  66.  


esto os dará el siguiente fallo:

g++ -g -Wall -c ./lib/Fecha.cc -I ./include
./lib/Fecha.cc: In member function ‘std::string Fecha::toString() const’:
./lib/Fecha.cc:205: error: se solicitó la conversión desde ‘std::stringstream’ al tipo no escalar ‘std::string’
make: *** [Fecha.o] Error 1


Espero respuestas.Gracias.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: que se hace para utlizar stringstream?ver codigo
« Respuesta #14 en: Miércoles 15 de Octubre de 2008, 17:31 »
0
Cita de: "pacorubio77"
Hola,ya he visto que os habeis avalanzado todos contra mi.

Para nada, simplemente te pedimos algo basico, ahora con el codigo en 30'' se soluciona el problema:
Código: Text
  1. return sfecha.str();
  2.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

pacorubio77

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: que se hace para utlizar stringstream?ver codigo
« Respuesta #15 en: Miércoles 15 de Octubre de 2008, 17:43 »
0
Teniais razon,muchas gracias,ya lo se para la próxima.un saludo,GRacias