ifstream >> enum

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Xethoras
Beiträge: 36
Registriert: 05.03.2008, 21:56

ifstream >> enum

Beitrag 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...
Benutzeravatar
Biolunar
Establishment
Beiträge: 154
Registriert: 27.06.2005, 17:42
Alter Benutzername: dLoB

Re: ifstream >> enum

Beitrag 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;
}
Helmut
Establishment
Beiträge: 237
Registriert: 11.07.2002, 15:49
Wohnort: Bonn
Kontaktdaten:

Re: ifstream >> enum

Beitrag 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
Xethoras
Beiträge: 36
Registriert: 05.03.2008, 21:56

Re: ifstream >> enum

Beitrag von Xethoras »

Danke für eure Antworten.
Antworten