[C++]Problem mit "enum"

DeChecka

Erfahrenes Mitglied
Hi!
Ich will mit enum einfach einen Datentyp "monate" festlegen, der die zwölf Monate enthalten soll.
Das geht auch alles, sobal ich aber einer Variable vom Typ "monate" den Wert 0 zuweisen will, meldet der Compiler, dass ich "int" nicht in "monate" umwandeln darf...
Mein Quellcode:
Code:
enum monate
{
 Januar , Februar, Maerz, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember
};

monate Monat = 0;

Da ja intern die Stati "Januar", "Februar", etc. als ints gespeichert werden, müsste das doch aber zulässig sein...

Kann mir jemand helfen?

MfG
DeChecka
 
Ja das liegt daran das der Wertebreich eines ints größer ist als der Wertebereich deines enums...
Deswegen "passt" ein int nicht in einen enumdatentyp..

Musst du dementsprechend casten dann funktioniert das auch...

Gruß

RedWing
 
Hmmm, was ist da die beste Möglichkeit?

Haste da 'nen Vorschlag?

Komisch ist übrigens dann aber dass, was hier unter Punkt 6.4 steht... :confused:

MfG
DeChecka
 
Hmm, habs einfach mal mit nem Function-Style-Cast gemacht...

Scheint zu funktionieren, gibt's da irgendwelche Einwände gegen diese Methode? ;)

MfG
DeChecka
 
Hallo
intern werden enums natürlich wie ints behandelt, aber die Zuweisung von nem int auf ein enum geht trotzdem
nicht siehe meinem obigen Post..
Vergleiche mit ints funktionieren da ein enum impilizit beim Vergleich in einen int gecastet wird...

Code:
enum monate
{
 Januar , Februar, Maerz, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember
};

monate Monat = static_cast<monate>(0);

und sowas geht natürlich auch:
Code:
enum monate
{
 Januar , Februar, Maerz, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember
};

int jan = Januar;

So sollte es funktionieren...

Gruß

RedWing
 
Zuletzt bearbeitet:
Hmm, ok, danke mal!

Ich merke aber gerade, dass sich die Methode mit "enum" generell nicht für meine Zwecke eigenet... (Leider).

Ich will nämlich die Monate als std:string haben und damit 'ne Routine durchführen...
Allerdings will ich nicht immer das gleiche, nur für 'nen anderen Monat schreiben.
Es soll also 'ne for-Schleife werden, die von 1-12 bzw. 0-11 (ist ja egal) hochzählt, dabei aber nicht die Nummern, sondern die Monate verwendet...

Gibt's da irgendeine Möglichkeit?

PS: Das von mir angesprochenen Tutorial hat dann aber 'nen Fehler... ;)

MfG
DeChecka
 
Nimm doch einfach nen std::vector gefüllt mit Strings:

Code:
#include <iostream>
#include <vector>

using namespace std;



int main(){
        vector<string> s;
        s.push_back("Januar");
        s.push_back("Februar");
        s.push_back("Maerz");
        for(int i = 1; i <= s.size(); i++){
                cout << "Wie schnell das Jahr vergeht. Jetzt is schon " << s[i-1] << endl;
                if(i == 3)
                             cout << "Im " << s[i-1] << " hat mein Opa Geburtstag!" << endl;
        }
}

Oder du spezifizierst nochmal genauer was du möchtest...

Gruß

RedWing
 
DeChecka hat gesagt.:
Ja, danke, das kommt sehr gut hin!

Haste noch 'nen kleinen Tipp als Lektüre, wo solche Vektoren gut erklärt sind? ;)
Schau mal bei google ;)

Ansonsten kann ich noch dazu sagen vector sind nichts andres als Felder nur das sie dynamsch in Ihrer
Größe veränderbar sind...

Wenn du weißt wie man mit einer API Referenz umgeht ist das eigentlich alles was du brauchst:

http://www.sgi.com/tech/stl/Vector.html

Oder noch besser:
http://www.cppreference.com/cppvector/

da sind auch gleich Bsp zu jeder Methode mit bei ...

Gruß

RedWing
 
Zurück