Pregunta

Estoy tratando de usar el map contenedor en C++ de la siguiente manera:La Clave es un string y el valor es un objeto de tipo ofstream.Mi código es como sigue:

#include <string>
#include <iostream>
#include <map>
#include <fstream>

using namespace std;

int main()
{
  // typedef map<string, int> mapType2;
  // map<string, int> foo;

  typedef map<string, ofstream> mapType;
  map<string, ofstream> fooMap;

  ofstream foo1;
  ofstream foo2; 

  fooMap["file1"] = foo1;
  fooMap["file2"] = foo2;

  mapType::iterator iter = fooMap.begin();
  cout<< "Key = " <<iter->first;
}

Sin embargo, cuando intento compilar el código anterior, me sale el siguiente error:

C:/Dev-Cpp/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/ios_base.h:
In member function `std::basic_ios<char, std::char_traits<char> >& std::basic_ios<char, std::char_traits<char> >::operator=(const std::basic_ios<char, std::char_traits<char> >&)': 
C:/Dev-Cpp/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/ios_base.h:741:
error: `std::ios_base& std::ios_base::operator=(const std::ios_base&)' is private
hash.cpp:88: error: within this context

Lo que va mal?Si esto no se puede hacer uso de map, existe alguna otra forma de crear clave:valor par?

Nota:Si puedo probar mi código con map<string, int> foo; funciona bien.

¿Fue útil?

Solución

A las transmisiones no les gusta que se copien. La solución más simple es usar un puntero (o mejor, un puntero inteligente) a una secuencia en el mapa:

typedef map<string, ofstream*> mapType;

Otros consejos

Los objetos de tipo ofstream no se pueden copiar, lo cual es una condición previa para colocarse en cualquier contenedor de la Biblioteca estándar.

El operator= es privado para std::ios_base, a partir de la cual ofstream se deriva.Así que usted no puede copiar los objetos foo1 y foo2.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top