Komischer Fehler bei switch



  • Hoi

    Ich habe folgende Situation

    string s1;
    
    switch(s1)
    {
        case "a":;
        break;
       default:;
    }
    

    Jetzt bekomme ich immer folgende Fehler

    switch-Ausdruck des Typs 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' nicht erlaubt
            Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
    

    Da muss doch irgendetwas falsch sein, weil seit wann darf man, keine strings als switch Argumente angeben.



  • Das durfte man noch nie.



  • du darfst zeichen angeben

    'a'

    dann gehts



  • Hallo

    dann mus aber auch ein char-Typ für die switch-Bedingung genmmen werden.

    bis bald
    akari



  • jop, strings darf man bei switch nicht benutzen, aber deinem case zufolge willste
    ja vlt nur einzelne zeichen vergleichen?
    also so:

    char s1;
    
    switch (s1)
    {
       case 'a': 
                   //mach was
                   break;
        default:
                   //mach was
    }
    


  • Storm.Xapek.de schrieb:

    du darfst zeichen angeben

    'a'

    dann gehts

    Nö, switch darf nur für ints und chars benutzt werden (wegen Sprungtabelle). Der übergebene string s1 ist keine Zahl.

    MfG

    GPC



  • Ahh, danke

    Eine andere Frage habe ich aber noch.

    In welcher Reihenfolge werden einer Funktion die Argumente übergeben?

    function(var1,var2,var3);
    

    wird zuerst var1 oder var3 übergeben??

    und gilt das gleiche wenn man Funktionen als Argumente hat?

    function(func1(),func2(),func3());
    


  • wenn du meinst ob bei

    meineFunktion(f1(), f2(), f3());
    

    zuerst f1, f2 oder f3 aufgerufen werden: das darf der Compiler AFAIK machen wie er will



  • Blue-Tiger schrieb:

    wenn du meinst ob bei

    meineFunktion(f1(), f2(), f3());
    

    zuerst f1, f2 oder f3 aufgerufen werden: das darf der Compiler AFAIK machen wie er will

    Korrekt. Der Compiler muss nur sicherstellen, dass f1, f2 und f3 aufgerufen wurden, bevor meineFunktion aufgerufen wird. In welcher Reihenfolge f1-f3 aufgerufen werden wird vom Standard aber nicht festgelegt. Jede beliebige Reihenfolge ist denkbar inklusive einer Parallelausführung.


Anmelden zum Antworten