Problem mit konstantem Wert im switch case



  • class myClass {
    public:
    int aValue() { 
       return 10;
    }
    };
    
    int main() {
    
    myClass example;
    
    const int value = example.aValue();
    
    const int anotherValue = ...;  //Assigning some value here
    
    switch(anotherValue) {
       case value:
       //do stuff...
       break;
    }
    
    return 0;
    }
    

    "Ausdruck wurde nicht zu einer Konstanten ausgewertet"

    Wo liegt der Fehler? 😕



  • Value muss zur Compilezeit konstant sein.



  • Der Case ausdruck muss, meines Wissens nach, zur Compliezeit bekannt sein und kann nicht der Rückgabewert einer Funktion sein.

    Sprich funktionieren nur sachen wie

    case 5:
    
    case ALPHA: //ALPHA muss hier z.B. ein element eines enums sein
    
    etc.
    


  • Schau dir mal constexpr an.

    Also:

    constexpr int aValue() { 
       return 10; 
    } 
    
    ...
    
    constexpr int value = example.aValue(); 
    
    switch(anotherValue) { 
       case value: 
       //do stuff... 
       break; 
    }
    

    Übrigens sehr spannend, was inzwischen alles mit constexpr geht. Jason Turner hat in seinen beiden letzten Episonden - meiner Meinung nach - ziemlich coole Dinge getan (compile time random maze generation mit path finding): https://www.youtube.com/watch?v=3SXML1-Ty5U



  • Sieht interessant aus...ich werd mir das mal genauer angucken. Danke fürs Feedback!



  • Wozu const int was zuweisen?

    int x = 0;
    	cin >> x;
    
    	switch( x )
    	{
    	case 5:
    		cout << "fünf";
    		break;
    	default:
    		cout << "nicht fünf";
    		break;
    	}
    


  • @EOP
    Ich hab keinen Plan was du mit deinem Beitrag sagen willst.


Log in to reply