Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » enum to int & int to enum

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.08.2006, 15:02 Uhr
Lensflare



hallo.

ich bekomme einen runtime error und versuche ihn schon seit 3 tagen zu beseitigen.

einige versuche deuten darauf hin, dass es vielleicht etwas mit enum zu tun hat.

ich benutze eine lib namens "allegro".
die lib hat ein globales enum, wo die tasten der tastatur aufgelistet sind

C++:
enum {
   __allegro_KEY_A            = 1,
   __allegro_KEY_B            = 2,
   __allegro_KEY_C            = 3,
//...
};

#define KEY_A                 __allegro_KEY_A
#define KEY_B                 __allegro_KEY_B
#define KEY_C                 __allegro_KEY_C
//...



dann gibt es ein array namens key[], mit den man pröfen kann ob eine taste gerade gedrückt ist.

C++:
if(key[KEY_A])
{
  //Taste A ist gerade gedrückt
}



in meinem projekt habe ich eine klasse für einen spieler angelegt, die die werte der tasten
speichern soll.

also so:

C++:
#define USE 0
#define LEFT 1
#define SELECT 2
#define RIGHT 3

class CPlayer
{
public:
//...
  void SetKeyUse(int k) { m_iKey[USE] = k; };
  void SetKeyLeft(int k) { m_iKey[LEFT] = k; };
  void SetKeySelect(int k) { m_iKey[SELECT] = k; };
  void SetKeyRight(int k) { m_iKey[RIGHT] = k; };
//...

private:
  int  m_iKey[4];
//...



dann "setze" ich die tasten für jeden spieler:

C++:
spieler1->SetKeyLeft(KEY_A);
spieler1->SetKeyRight(KEY_D);
spieler1->SetKeySelect(KEY_S);
spieler1->SetKeyUse(KEY_W);



und überprüfe in der klasse des spielers, ob diese gedrückt wurden:

C++:
if(key[ m_iKey[USE] ])
{
   //Taste für die Aktion "USE" wurde gedrückt.
}



//das ist eine vereinfachte darstellung, da ich auch noch überprüfe ob die taste im letzten zyklus auch gedrückt war, um die "USE-Aktion" bei gedrückter taste nicht mehrmals auszuführen.
aber das ist für das problem nicht relevant, denke ich.


Meine frage ist nun, ob es ok ist, dass ich den wert, den KEY_A usw. hat, also einen enum wert, in ein int umwandle, ihn speichere und dann bei der überprüfung, ob die taste gedrückt ist, wieder in ein enum wert umwandle?

würde es einen unterschied machen, wenn ich die werte statt in int lieber in unsignded int speichern würde?

(beim probieren habe ich keinen unterschied gemerkt)
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.08.2006, 15:17 Uhr
Karldin Shinowa
Professional Noob


nein. Es geht nur enum in int aber nicht zurück
unsigned int macht da keinen unterschied


Zitat:

There is not an implicit conversion from int to an enum type:

MyEnumType x = 2; // should NOT be allowed by compiler
MyEnumType y = 123; // should NOT be allowed by compiler


--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.

Dieser Post wurde am 20.08.2006 um 15:20 Uhr von Karldin Shinowa editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.08.2006, 15:21 Uhr
Lensflare



der msvc compiler gibt weder errors noch warnings aus
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.08.2006, 16:44 Uhr
Karldin Shinowa
Professional Noob


Vllt ne sehr alte Version die das noch nicht anzeigt??? Mein Mingw zeigts als Fehler an

C++:
enum my{lol=1,rofl=2};

int main()
{
  my a=1;//invalid conversion from `int' to `my'
}


--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.08.2006, 16:51 Uhr
Lensflare



hab msvc2003.

was hat denn enum für ein typ? ^^
int? unsigned int?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.08.2006, 17:02 Uhr
Lensflare




Zitat von Karldin Shinowa:

nein. Es geht nur enum in int aber nicht zurück



ich will keinen wert in enum ändern, sondern
ein int übergeben, wo ein enum wert erwartet wird.

oder kann das garnicht sein, dass ein enum erwartet wird?
eigentlich übergebe ich ja ein enum an das key[] array als index
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 20.08.2006 um 17:02 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.08.2006, 18:47 Uhr
ao

(Operator)



Zitat von Karldin Shinowa:
Vllt ne sehr alte Version die das noch nicht anzeigt??? Mein Mingw zeigts als Fehler an

Versuch doch mal einen expliziten Cast:

C++:
enum my{lol=1,rofl=2};

int main()
{
  my a=(my) 1;//invalid conversion from `int' to `my'
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: