Prob mit Meldung



  • !Case bypasses initialization of al local variable

    Könnt ihr mir sagen was er damit meint?



  • Revils schrieb:

    !Case bypasses initialization of al local variable

    Ein case überspringt die initialisierung einer lokalen variablen



  • Man muss den Block einklammern, wenn man Variablen nach einer case-Marke deklariert:

    case 0:
    {
    int num = 0;
    break;
    }
    


  • Ey Leute...danke euch. Perfekt. Hat geklappt.



  • Wenn du unbedingt lokale Variablen innerhalb von switch möchtest, rät es sich, neue Blöcke zu erzeugen. Vergiss das break aber dennoch nicht. Zum Beispiel so, Formatierung ist ja egal:

    switch (Var)
    {
        case 1:
        {
            double d = 32.5476;
            d *= 54.7632
        }   break;
    
        case 2:
        {
            double d = 21.12;
        }   break;
    }
    

    Allerdings solltest du überlegen, ob sich bei lokalen Deklarationen nicht die Auslagerung in eine separate Funktion lohnt. Oft - nicht immer - gehen mit neuen Variablen auch einige Anweisungen einher, die den Code schnell aufblähen und die Funktion lang und unübersichtlich machen. Bei switch selbst kann man sich überlegen, ob nicht Alternativen wie std::map angebracht sind.



  • Für was steht das std::map? Ich muss sagen, ich habe noch nie mit map's gearbeitet.



  • std::map ist ein Klassen Template: http://www.cplusplus.com/reference/stl/map/

    Edit: typo korrigiert



  • std ist ein namespace, map eine klasse.



  • Naja, statt

    std::string Name;
    int Var = ...;
    switch (Var)
    {
        case 3:
            Name = "der dritte";
            break;
    
        case 17:
            Name = "Nummer Siebzehn";
            break;
    
        case 42:
            Name = "Die Antwort persönlich";
            break;
    }
    

    hast du dann sowas:

    std::map<int, std::string> Map;
    Map[3] = "der dritte";
    Map[17] = "Nummer Siebzehn";
    Map[42] = "Die Antwort persönlich";
    
    int Var = ...;
    std::string Name = Map[Var]; // Vorsicht, evtl. Eintrag hinzugefügt -> je nachdem find() besser
    

    Vorteil ist, dass du nicht auf integrale Konstanten als Key-Typen beschränkt bist, sondern irgendwas verwenden kannst.


Log in to reply