Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: erest0r en 21 Septiembre 2014, 04:33 am



Título: Ayuda: pasando un objeto ofstream como parametro
Publicado por: erest0r en 21 Septiembre 2014, 04:33 am
Hola, tengo un error pero no entiendo que sucede, me arroja esta notificacion: "error: use of deleted function 'std::basic_ofstream<char>::basic_ofstream( const std::basic_ofstream<char>& )', el codigo tiene un patron parecido a este:

Código
  1.  
  2. #include <fstream>
  3.  
  4. class miClase
  5. {
  6.     public:
  7.          miClase( std::ofstream& );
  8.     private:
  9.          std::ofstream stream;
  10. };
  11.  
  12. miClase::miClase( std::ofstream& tStream )
  13.      : stream( tStream )
  14. {
  15.  
  16. }
  17.  
  18. int main()
  19. {
  20.     std::ofstream mainStream( "texto.txt", std::ios::out );
  21.     miClase pruebaClase( mainStream );
  22. }
  23.  

De antemano, gracias



Título: Re: Ayuda: pasando un objeto ofstream como parametro
Publicado por: BlackM4ster en 22 Septiembre 2014, 08:14 am
Creo que el problema es que ofstream no permite el constructor de copia. Tendrías que hacerlo por punteros o pasando el parametro del nombre de archivo:

Por punteros:
Código
  1. #include <fstream>
  2.  
  3. class miClase{
  4.    public:
  5.  
  6.        miClase(std::ofstream& tStream){ stream = &tStream; };
  7.        void Escribe(){ *stream << "Hola. Esto es una prueba\n";
  8.                        stream->close(); }
  9.  
  10.    private:
  11.        std::ofstream *stream;
  12. };
  13.  
  14. int main(){
  15.  
  16.    std::ofstream mainStream("texto.txt", std::ios::out);
  17.  
  18.    miClase pruebaClase(mainStream);
  19.    pruebaClase.Escribe();
  20. }

Alternativa:
Código
  1. #include <fstream>
  2. #include <iostream>
  3.  
  4. class miClase{
  5.    public:
  6.  
  7.        miClase(std::string filename){ stream.open(filename, std::ios::out); }
  8.        void Escribe(){ stream << "Hola. Esto es la prueba 2\n";
  9.                        stream.close(); }
  10.  
  11.    private:
  12.        std::ofstream stream;
  13. };
  14.  
  15. int main(){
  16.  
  17.    miClase pruebaClase("texto.txt");
  18.    pruebaClase.Escribe();
  19. }


Título: Re: Ayuda: pasando un objeto ofstream como parametro
Publicado por: eferion en 22 Septiembre 2014, 08:33 am
ofstream no dispone de constructor copia. Carece de dicho constructor porque ofstream es un buffer de escritura y, al hacer uso del constructor copia, podrías tener dos ofstream distintos apuntando al mismo fichero. Si eso llega a suceder se podrían provocar inconsistencias en el fichero.

Dicho esto tienes dos opciones, o la solución propuesta por BlackM4ster o usar un puntero para referenciar la instancia de ofstream.


Título: Re: Ayuda: pasando un objeto ofstream como parametro
Publicado por: erest0r en 22 Septiembre 2014, 22:17 pm
Listo, lo hare entonces por puntero, gracias


Título: Re: Ayuda: pasando un objeto ofstream como parametro
Publicado por: BlackM4ster en 23 Septiembre 2014, 13:03 pm
Me alegro de que te haya servido xD