Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Fehlermeldung bei switch..

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 < [ 2 ]
000
20.03.2004, 17:50 Uhr
Fraenky



Hi Leute!

ich bekomme immer die diese Fehlermeldung: (beim compilieren..)

Switch selection expression must be of integral type
in function main()


Dabei übergeb ich der switch Schleife einen string:

C++:
string ko;

switch(ko)
{
case 'A1':
{
cout << " Karte 1";
}
}



Aber er will einen Integer haben! (oder?)
Mit char klappt das doch auch warum mit string nicht??

Ich möchte nicht andauernd hin und her casten was bei mir sowieso nicht klappt...

Kann mir jemand helfen??

THX!

MfG
Fraenky
--
Welcome to the real World.

www.fraenkysweb.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.03.2004, 18:03 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


er kann nur mit einem zeichen arbeiten was sozusagen eine nummer ist (also quasi eine zählbare variable will der haben.
ist auch der grund warum ich switch scheisse finde...wenn du es doch machen willst musst du es dann halt doch mit if-statements verwenden oder vorher sozusgagen ein stringparser rüberlaufen lassen um zu gucken was im string steht und dann states definieren die dann das switch wieder fressen kann (also alles scheisse machs gleich mit if-statments)


C++:
string ko="tralala";
if(!strcmp(ko.c_str(),"A1") cout<<("A1");
else if(!strcmp(ko.c_str(),"B1") cout<<("B1");
else if..... //usw..


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 20.03.2004 um 18:04 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.03.2004, 18:05 Uhr
Pablo
Supertux
(Operator)


Weil switch mit int, char und solchen Datentypen arbeitet, die sich als Zahlen darstellen lassen.

ko ist ein Objekt der Klasse string und wenn das möglich wäre, dann müsstest du case "A1" benutzen, denn die Zeichen ' sind die Zeichen für char und nicht für Zeichenkette.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.03.2004, 18:07 Uhr
Pablo
Supertux
(Operator)



Zitat:
Windalf postete


C++:
string ko="tralala";
if(!strcmp(ko.c_str(),"A1") cout<<("A1");
else if(!strcmp(ko.c_str(),"B1") cout<<("B1");
else if..... //usw..




Aber wenn man schon mit string arbietet, dann könnte man auch

C++:
if (ko=="A1") std::cout << "A1";



oder?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.03.2004, 18:10 Uhr
Fraenky



@Pablo:
Die "" hab ich auch schon benutzt hat aba nicht geklappt..

@Windalf:
ich denk ma dafür ist die switch doch da um nicht zu viele if Statements zu benutzen, um zB ein Menü auszuwählen..

Wie kann ich denn jetzt den string in ein char casten?? gibts da ne c++ Funktion??

Thx
MfG
Fraenky
--
Welcome to the real World.

www.fraenkysweb.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.03.2004, 18:12 Uhr
Pablo
Supertux
(Operator)


1. Windalf und ich haben bereits gesagt, dass es nicht geht. Was ich sagte, wenn es ginge, dann müsste man "" verwenden.

2. Windalf hat diese Funktion in seinem Beispiel benutzt, deshalb habe ich das zweite Kommentar gemacht.


C++:
ko.c_str()


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.03.2004, 18:18 Uhr
Fraenky



habs jetzt so gemacht:


C++:
char cko[256];

cko[256]=ko.c_str()

switch(cko[256])
...


und bekomme dierse fehlermeldung...

[bError E2034 karte.cpp 144: Cannot convert 'const char *' to 'char' in function m
ain()[/b]

ich hab übrigends den Borlandcompiler..

Zur Info: in ko stehen nur 2 Zeichen - 1 Buchstabe und eine Ziffer..also A1 B3..and so on..
--
Welcome to the real World.

www.fraenkysweb.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.03.2004, 18:35 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Um alles vielleicht etwas klarer auszudrücken: Switch kann immer nur 1 (in Worten: Ein) Zeichen/Zahl verarbeiten.

Ein char ist nichts anderes als eine Zahl (siehe ASCII-Tabelle). Eine Zeichenkette ist ein Array aus chars, also ein Array aus zahlen.

Man könnte sich eben theoretisch so behelfen:


C++:
int myswitch(std::string string)
{
  if(string == "A1")
    return 0;
  if(string == "A2")
    return 1;
  if(string == "Buha")
    return 2;
}

int main(void)
{
  std::string string = "Buha";
  switch(myswitch(string))
  {
  case 0:
     {  // hier code bei A1
     } break;
  case 1:
     {  // hier code bei A2
     } break;
  case 2:
     {
        std::cout << "Im String stand Buha" << std::endl;
     } break;
  }
  return 0;
}



C++ kann im Grunde nur mit Zahlen rechnen (eigentlich kann jeder Computer nur mit 1 und 0 rechnen, aber daraus ergeben sich ja die zahlen :P), strings sind "arrays", damit kann er eben wie gesagt nicht direkt rechnen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.03.2004, 19:13 Uhr
Pablo
Supertux
(Operator)



Zitat:
Fraenky postete
habs jetzt so gemacht:


C++:
char cko[256];

cko[256]=ko.c_str()

switch(cko[256])
...


und bekomme dierse fehlermeldung...

[bError E2034 karte.cpp 144: Cannot convert 'const char *' to 'char' in function m
ain()[/b]

ich hab übrigends den Borlandcompiler..




Das kann nicht funktioneren, da cko ein char[256] ist und ko.c_str() ein char* ist.

Du musst so machen

C++:
char cko[256];
strcpy(cko, ko.c_str());




Zitat:

Zur Info: in ko stehen nur 2 Zeichen - 1 Buchstabe und eine Ziffer..also A1 B3..and so on..



Was willst du denn mit deiner switch Anweisung machen? Was willst du überprüfen? Ich glaube, du benutzt die switch Anweisung falsch, aber das kann ich nicht 100% sgen, wenn ich nicht weiß, was du tun willst.

Nur noch ne Frage: Wenn du schon C++ benutzt und sogar string, wieso willst du char* benutzen?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 20.03.2004 um 19:15 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
20.03.2004, 19:41 Uhr
Fraenky



in ko (koordinaten) stehen wie beim Schiffe versenken Koordinaten (A1, B5, ...) und wenn die Koordinate so und so in ko steht mache dies und das..

Dann werd ich mal jetzt zu if übergehen...*arbeit*

aso: ich will nicht char benutzen; mich hat das bloß gewundert, dass switch nicht mit string aber doch mit char geht

das mit strcpy(cko, ko.c_str()); klappt, aber irgendwie überspringt er jetzt den switch...egal ich lass es jetzt...
--
Welcome to the real World.

www.fraenkysweb.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: