Frage

Ich versuche, die map Behälter in C ++ wie folgt zu verwenden: Der Schlüssel ein string ist und der Wert ist ein Objekt vom Typ ofstream. Mein Code sieht wie folgt aus:

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

Allerdings, wenn ich versuche, den obigen Code zu kompilieren, erhalte ich folgende Fehlermeldung:

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

Was läuft falsch? Ist dies nicht map verwendet getan werden kann, gibt es eine andere Möglichkeit, solche Schlüssel zu erstellen: Wertepaar

. Hinweis: Wenn ich meinen Code mit map<string, int> foo; testen, es funktioniert

War es hilfreich?

Lösung

Streams nicht mag kopiert werden. Die einfachste Lösung wird mit einem Zeiger (oder besser gesagt, ein Smart-Pointer) auf einen Strom in der Karte:

typedef map<string, ofstream*> mapType;

Andere Tipps

Objekte vom Typ ofstream sind nicht kopierbar, was eine Voraussetzung dafür ist, setzt in jeden Standard Library Behälter werden.

Die operator= ist privat für std::ios_base, von der ofstream abgeleitet wird. So können Sie die Objekte foo1 und foo2 nicht kopiert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top