Question

J'essaie d'utiliser le conteneur map en C ++ de la manière suivante: La clé est un string et la valeur est un objet de type ofstream. Mon code se présente comme suit:

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

Cependant, lorsque j'essaie de compiler le code ci-dessus, le message d'erreur suivant s'affiche:

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

Qu'est-ce qui ne va pas? Si cela ne peut pas être fait avec map<string, int> foo;, existe-t-il un autre moyen de créer cette paire clé: valeur?

Remarque: si je teste mon code avec <=> cela fonctionne correctement.

Était-ce utile?

La solution

Les flux n'aiment pas être copiés. La solution la plus simple consiste à utiliser un pointeur (ou mieux, un pointeur intelligent) sur un flux de la carte:

typedef map<string, ofstream*> mapType;

Autres conseils

Les objets de type ofstream ne sont pas copiables, ce qui est une condition préalable pour pouvoir être placés dans un conteneur de bibliothèque standard.

Le operator= est privé pour std::ios_base, duquel ofstream est dérivé. Donc, vous ne pouvez pas copier les objets foo1 et foo2.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top