problem mit swith



  • moin, ichh abe ein problem:

    int cSelect = SendMessage(hChannel, CB_GETCURSEL, 0, 0);
                    switch(cSelect)
                    {
                        case index_design_0:
                            MessageBox(NULL, "Desgin", "SinSupport", MB_OK); 
                           break;
                        case index_code_0:
    
                            break;
                        case index_info_0:
    
                            break;
                        case index_info_1:
    
                            break;
                        case index_support_0:
    
                            break;
                        default:
                            MessageBox(NULL, "Bitte wählen Sie ein Channel aus !", "SinSupport", MB_OK);   
                    }
    

    die indexe vonj der combobox werden in varibalen gespeichert und ich will jetzt rausfinden welche das sind...
    abe rich bekomme en error:

    sinsupport.main.cpp: In function LRESULT WindowProcedure(HWND__*, UINT, WPARAM, LPARAM)': sinsupport.main.cpp:189: error:index_design_0' cannot appear in a constant-expression
    sinsupport.main.cpp:192: error: index\_code\_0' cannot appear in a constant-expression sinsupport.main.cpp:195: error:index_info_0' cannot appear in a constant-expression
    sinsupport.main.cpp:198: error: index\_info\_1' cannot appear in a constant-expression sinsupport.main.cpp:201: error:index_support_0' cannot appear in a constant-expression

    ich benutze DevC++



  • Hallo

    von welchem Typ sind index_design_0 und Konsorten?
    Bedingungs-Ausdrücke in switch müßen konstant sein, wie die Fehlermeldung auch sagt.

    bis bald
    akari



  • die variablen index_desgin_0, index_code_0 etc sind vom type int



  • Hallo

    aber sie müßen zusätzlich noch const sein.
    Eventuell ist es machbar, all diese Werte als Typen eines enums einzubinden.

    bis bald
    akari



  • nagut, dann muss ich halt konstanten erstellen



  • const int cindex_design_0 = index_design_0;
                    const int cindex_code_0 = index_code_0;
                    const int cindex_info_0 = index_info_0;
                    const int cindex_info_1 = index_info_1;
                    const int cindex_support_0 = index_support_0;
                    int cSelect = SendMessage(hChannel, CB_GETCURSEL, 0, 0);
                    switch(cSelect)
                    {
                        case cindex_design_0:
                            MessageBox(NULL, "Desgin", "SinSupport", MB_OK); 
                           break;
                        case cindex_code_0:
    
                            break;
                        case cindex_info_0:
    
                            break;
                        case icndex_info_1:
    
                            break;
                        case cindex_support_0:
    
                            break;
                        default:
                            MessageBox(NULL, "Bitte wählen Sie ein Channel aus !", "SinSupport", MB_OK);   
                    }
    

    so geht auch net 😞



  • enum my_type { MY_TYPE_1, MY_TYPE_2, MY_TYPE_3 };
    my_type a_type = ...;
    ...
    switch(a_type)
    {
    case MY_TYPE_1:
    ...
    break;
    
    case MY_TYPE_2:
    ...
    break;
    
    ...
    default:
    ...
    break;
    }
    


  • öhm habe en eror ^^

    enum change{
                    cindex_design_0,
                    cindex_code_0,
                    cindex_info_0,
                    cindex_info_1,
                    cindex_support_0
                    };
                    int cSelect = SendMessage(hChannel, CB_GETCURSEL, 0, 0);
                    change cselect = index_design_0,
                    index_code_0,
                    index_info_0,
                    index_info_1,
                    index_support_0;
                    switch(cselect)
                    {
                        case cindex_design_0:
                            MessageBox(NULL, "Desgin", "SinSupport", MB_OK); 
                           break;
                        case cindex_code_0:
    
                            break;
                        case cindex_info_0:
    
                            break;
                        case cindex_info_1:
    
                            break;
                        case cindex_support_0:
    
                            break;
                        default:
                            MessageBox(NULL, "Bitte wählen Sie ein Channel aus !", "SinSupport", MB_OK);   
                    }
    

    194 F:\Dev-Cpp\projects\sinsupport.main.cpp invalid conversion from `int' to `WindowProcedure(HWND__*, UINT, WPARAM, LPARAM)::change'



  • Hallo

    Was soll denn das sein?

    change cselect = index_design_0,
                    index_code_0,
                    index_info_0,
                    index_info_1,
                    index_support_0;
    

    bis bald
    akari



  • ein versuch ^ich weis net wie ich es machen kann



  • du kannst im enum auch angeben, welchen int-werten die einzelnen typen entsprechen sollen

    bsp:

    enum MEIN_ENUM { ERSTER_WERT = 2, ZWEITER_WERT = 99, DRITTER_WERT = 1337 };
    

    giebst du nichts an, also:

    enum MEIN_ENUM { ERSTER_WERT, ZWEITER_WERT, DRITTER_WERT };
    

    macht der compiler daraus:

    enum MEIN_ENUM { ERSTER_WERT = 0, ZWEITER_WERT = 1, DRITTER_WERT = 2 };
    

    eine variable vom einem enum-typ ist im grunde ein int, diese eigenschaft kannst du dir zu nutze machen:

    d.h.nehmen wir mal an eine funktion ABC() kann entweder A, B oder C rausgeben.
    Wobei eine 77 ein A bedeutet, ein 99 ein B und ein 102 ein C, dann kannst du das so machen:

    enum E_ABC { ABC_A = 77, ABC_B = 99, ABC_C = 102 };
    
    E_ABC returnValue = (E_ABC) ABC(); // eventuell gehts auch ohne den (E_ABC)-Cast
    
    switch(returnValue)
    {
    case ABC_A:
    do_some_stuff();
    break;
    
    case ABC_B:
    do_some_other_stuff();
    break;
    
    case ABC_C:
    do_some_very_other_stuff();
    break;
    
    default:
    ... // errormsg bzw. exception werfen
    break;
    }
    

Anmelden zum Antworten