Seite 1 von 1

ifstream >> enum

Verfasst: 31.05.2009, 15:45
von Xethoras
Das Problem ist folgendes: Ich möchte Daten aus einer Datei in eine Variable einlesen, deren Typ ein enum ist.
Ich bekomme folgende Fehlermeldung:
error C2679: Binärer Operator '>>': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'defaultEnum akzeptiert (oder keine geeignete Konvertierung möglich)

Sofern ich versuche, vom enum zu int zu casten, ändert sich die Fehlermeldung nur insofern, als dass statt 'defaultEnum', 'int' nicht aktzeptiert wird...

Re: ifstream >> enum

Verfasst: 31.05.2009, 17:15
von Biolunar
Du musst den operator>> auch für dein enum überladen:

Code: Alles auswählen

#include <ostream>
#include <istream>

enum farbe {rot, blau, gelb};
typedef unsigned long externer_farbe_typ;

template <typename char_t, typename traits_t>
std::basic_ostream<char_t, traits_t>& operator<< (std::basic_ostream<char_t, traits_t>& os, farbe const& f)
{
    return os << static_cast<externer_farbe_typ>(f);
}

template <typename char_t, typename traits_t>
std::basic_istream<char_t, traits_t>& operator>> (std::basic_istream<char_t, traits_t>& is, farbe& f)
{
    externer_farbe_typ temp;
    is >> temp;
    f = static_cast<farbe>(temp);
    return is;
}

Re: ifstream >> enum

Verfasst: 31.05.2009, 18:45
von Helmut
Wenn du zu obigem keine Lust hast, kannst du auch Folgendes machen:

Code: Alles auswählen

in >> (int&)enumvar;
Du musst aber drauf aufpassen, dass das enum die gleiche Größe wie int hat.

Ciao

Re: ifstream >> enum

Verfasst: 31.05.2009, 19:55
von Xethoras
Danke für eure Antworten.