PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : c: frage zu enums


Gast
2005-11-29, 19:11:28
hallo leute, ich hab hier ein enum gesehen, das ich nicht so ganz verstehe:

enum
{
Minimal_Quit = wxID_EXIT,
Minimal_About = wxID_ABOUT
};


falls es jemandem bekannt vor kommt, ja ich lerne gerade wx widgets, bzw. versuche es.

kann mir das obige enum jemand erklären? ich kenne enums nur so:


enum frage
{
ja;
nein;
};


und dann kann man frage entweder auf ja oder nein setzen. sozusagen ein c bool.

aber was bringt es mir, wenn ich es so schreibe?

enum { ja; nein; };

zeckensack
2005-11-29, 19:35:26
Eine enum hat auch einen Integerwert. Im einfachsten Fall ...enum WochenTag { Montag, Dienstag, Wochenende };... werden diese Werte vom Compiler vergeben, der dabei (nach ISO-C-Standard) bei 0 beginnt und hochzählt.

Die enum mit Zuweisung gibt einfach an dass du einen bestimmten anderen Wert haben willst.
enum
{
A, //ist 0
B, //ist 1
C=7, //ist 7
D //ist 8
};

In deinem Beispiel ist einfach Minimal_Quit=wxID_EXIT und Minimal_About=wxID_ABOUT.
(btw sinnvoll finde ich solche Schon-Wieder-Aber-Anders-Definitionen bereits existierender Konstanten nicht gerade)

aber was bringt es mir, wenn ich es so schreibe?

enum { ja; nein; };
IMO garnichts. Da fehlt noch was, denn die Zeile Code allein müsste eine namenlose enum direkt in die virtuelle Mülltonne hinein definieren.

Es kann höchstens sein dass eine umschließende Klassen- oder Namespace-Deklaration diese Werte dann trotzdem "sehen" kann, auch wenn kein konkreter Typ und keine Variable definiert wird. Weiß ich jetzt nicht.

Btw ich kenne enums auch nur mit Komma und nicht mit Semikolon :|

Coda
2005-11-29, 20:27:50
Weiß ich jetzt nicht.Sie kann. Man muss enums ja (leider) nicht mit dem Namensoperator verwenden. Also "enum qux { foo, bar };" gibt im Namensbereich foo und bar nicht qux::foo und qux::bar.

Man kann natürlich einen namespace drumrumbasteln ;)

Btw ich kenne enums auch nur mit Komma und nicht mit Semikolondito.

enum { ja; nein; };Abgesehen davon dass das Ding so nicht kompiliert ist es ziemlich doof. ja=false, nein=true :uclap:

Senior Sanchez
2005-11-29, 20:58:25
Abgesehen davon dass das Ding so nicht kompiliert ist es ziemlich doof. ja=false, nein=true :uclap:

Wenn ich dich jetzt fragen würde: Willst du mich heiraten, was würdest du sagen? :biggrin:

zeckensack
2005-11-29, 21:51:20
Wenn ich dich jetzt fragen würde: Willst du mich heiraten, was würdest du sagen? :biggrin:Der Genießer schweigt und läuft so schnell wie er kann.
Oder er sagt "false" :usweet:

Senior Sanchez
2005-11-29, 22:14:04
Der Genießer schweigt und läuft so schnell wie er kann.
Oder er sagt "false" :usweet:

lol, hmm, ich warte ja schon auf ne antwort, ne pn hab ich auch noch nich, aber das is schlimm das er mich so warten lässt :usad:

Coda
2005-11-29, 22:55:29
*rennt immer noch*

Senior Sanchez
2005-11-29, 23:54:00
*rennt immer noch*

Du weist gar net was dir entgeht! Feigling! :biggrin:

So, back to topic.

Zeckensack, wie wärs? :naughty:

Nein, scherz bei seite *g* Nicht das hier noch der Eindruck entsteht ich sei schwul, und wenn, dann wäre es mir auch egal ;)

1337Gast
2005-11-30, 08:46:23
verstehe immer noch nicht so ganz, was man mit ner namenlosen enum anfangen soll ...

okay prima, ich habe:


enum
{
wert1 = 15,
wert2 = 30
};


aber was tue ich jetzt damit? wie soll ich ne namenlose enum ansprechen?

Gast
2005-11-30, 14:13:20
if (15==wert1)
cout << "good boy" << endl;
else
blow_up_PC();

Coda
2005-11-30, 15:14:32
Namenlose Enums sind praktisch um schnell mehrere eindeutige Konstanten zu definieren.

ShadowXX
2005-11-30, 17:42:26
Namenlose Enums sind praktisch um schnell mehrere eindeutige Konstanten zu definieren.

Sie sind nicht nur praktisch, sondern sollen unter C++ auch anstatt #define benutzt werden.

Leider klappt das nicht mit Strings....gibts da eigentlich auch ein "C++-Lösung" für.

Coda
2005-11-30, 17:47:54
const char foo[] = "bar"

oder

const std::string foo("bar");

ShadowXX
2005-11-30, 18:01:31
const char foo[] = "bar"

oder

const std::string foo("bar");

Ja, den kannte ich schon.....aber ich dachte das es etwas ähnlich elegantes wie enums vielleicht gibt, über das ich noch nicht gestolpert bin.

Für unsere Zwecke ist die "const"-Lösung nicht wirklich geeignet.

zeckensack
2005-11-30, 18:03:56
Coda,
"static const" ist schon noch einen Zacken besser. Vor dem Editieren hattest du noch "const static", aber da maulen gewisse GCC-Versionen rum, wahrscheinlich auch zurecht.