Pergunta

Eu estou tentando usar o recipiente map em C ++ da seguinte forma: A chave é um string eo valor é um objeto do tipo ofstream. Meus olhares de código da seguinte maneira:

#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;
}

No entanto, quando eu tento compilar o código acima, eu recebo o seguinte erro:

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

O que está errado? Se isso não pode ser feito usando map, há alguma outra maneira de criar tal chave: valor par

Nota:. Se eu testar o meu código com map<string, int> foo; trabalha muito bem

Foi útil?

Solução

Streams não gostam de ser copiado. A solução mais simples é usar um ponteiro (ou melhor, um ponteiro inteligente) para um fluxo no mapa:

typedef map<string, ofstream*> mapType;

Outras dicas

Objetos do tipo ofstream não são copiable, que é um pré-requisito para ser colocado em qualquer recipiente biblioteca padrão.

O operator= é privado para std::ios_base, a partir do qual ofstream é derivado. Então você não pode copiar o foo1 e foo2 objetos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top