SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: pacorubio77 en Martes 14 de Octubre de 2008, 18:42

Título: que se hace para utlizar stringstream?ver codigo
Publicado por: pacorubio77 en Martes 14 de Octubre de 2008, 18:42
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.
Título: Re: que se hace para utlizar stringstream?ver codigo
Publicado por: lostshell en Miércoles 15 de Octubre de 2008, 07:35
agregaste #include <sstream> ??
Título: Re: que se hace para utlizar stringstream?ver codigo
Publicado por: pacorubio77 en Miércoles 15 de Octubre de 2008, 10:05
lo utilizé ,lo tengo definido.
Título: Re: que se hace para utlizar stringstream?ver codigo
Publicado por: rfog en Miércoles 15 de Octubre de 2008, 10:42
¿No será que te falta la llave de cierre de "string Fecha::toString()const {"?
Título: Re: que se hace para utlizar stringstream?ver codigo
Publicado por: Eternal Idol en Miércoles 15 de Octubre de 2008, 10:44
pacorubio77: por favor reduci el problema a la minima expresion de codigo compilable (o que solo tenga el error que queres subsanar).
Título: Re: que se hace para utlizar stringstream?ver codigo
Publicado por: pacorubio77 en Miércoles 15 de Octubre de 2008, 10:48
Perdona ,pero no he entendido este ultimo mensaje que me habeis enviado..espero me lo expliqueis..un saludo,espero respuesta.
Título: Re: que se hace para utlizar stringstream?ver codigo
Publicado por: m0skit0 en Miércoles 15 de Octubre de 2008, 11:22
Pon sólo la parte del código que tenga específicamente el problema
Título: Re: que se hace para utlizar stringstream?ver codigo
Publicado por: Eternal Idol en Miércoles 15 de Octubre de 2008, 11:28
No, pone un PROGRAMA COMPLETO que SOLO contenga el problema, que compile excepto por el problema.
Título: Re: que se hace para utlizar stringstream?ver codigo
Publicado por: pacorubio77 en Miércoles 15 de Octubre de 2008, 11:42
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?
Título: Re: que se hace para utlizar stringstream?ver codigo
Publicado por: Eternal Idol en Miércoles 15 de Octubre de 2008, 11:53
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.
Título: Re: que se hace para utlizar stringstream?ver codigo
Publicado por: m0skit0 en Miércoles 15 de Octubre de 2008, 12:04
Te está costando hacerte entender  :lol:
Título: Re: que se hace para utlizar stringstream?ver codigo
Publicado por: Eternal Idol en Miércoles 15 de Octubre de 2008, 12:20
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.
Título: Re: que se hace para utlizar stringstream?ver codigo
Publicado por: rfog en Miércoles 15 de Octubre de 2008, 12:55
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:
Título: Re: que se hace para utlizar stringstream?ver codigo
Publicado por: pacorubio77 en Miércoles 15 de Octubre de 2008, 17:24
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.
Título: Re: que se hace para utlizar stringstream?ver codigo
Publicado por: Eternal Idol en Miércoles 15 de Octubre de 2008, 17:31
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.  
Título: Re: que se hace para utlizar stringstream?ver codigo
Publicado por: pacorubio77 en Miércoles 15 de Octubre de 2008, 17:43
Teniais razon,muchas gracias,ya lo se para la próxima.un saludo,GRacias