Problem bei Fehlersuche



  • Hallo Leute, ich weiß echt nicht mehr weiter

    folgende Aufgabenstelleung

    Programm schreiben, wo der Benutzer die Möglichkeit hat zwischen einem Rechteck und einem Quadrat zu entscheiden, die Dimension festzulegen und diese Dann mit X und leerzeichen am Bildschirm ausgeben

    mein lösungsansatz:

    #include <iostream>
    using namespace std;
    
    class QuadratMatrix
    {
          int x;
          private:
                  int Matrix[100][100];
          public:
                  void MatrixA();
                  void input();
                  void output();
                  };
    
    class RechteckMatrix
    {
          int x,y;
          private: 
                   int Matrix[100][100];
          public: 
                  void MatrixA();
                  void input();
                  void output();
                  };
    
    void QuadratMatrix::MatrixA()
    {
         cout <<"Geben Sie die Zeilen/Spalten Anzahl der Matrix ein:";
         cin >> x;
    }
    
    void QuadratMatrix::input()
    {
        for(int i = 0;i<x;i++)
                {
                    for(int j= 0;j<x;j++)
                    {
                            cout<<"Bitte geben den Boolschen Wert fuer Zeile"<<i+1<<" und Spalte "<<j+1<<"ein:";
                            cin >> Matrix[i][j];
    }
    }
    }
    
    void QuadratMatrix::output()
    {
         for(int i=0;i<x;i++)
         {
                 for(int j=0;j<x;j++)
                 {
                         if(Matrix[i][j] == 1)
                         {
                         cout << "X";
                         }
                         else
                         {
                             cout <<" ";
                             }
                             }
                             }
                             }
    
    void RechteckMatrix::MatrixA()
    {
         cout <<"Geben Sie die Zeilen Anzahl der Matrix ein:";
         cin >> x;
         cout <<"Geben Sie die Spalten Anzahl der Matrix ein:";
         cin >> y;
    }
    
    void RechteckMatrix::input()
    
    {
        for(int i = 0;i<x;i++)
                {
                    for(int j= 0;j<x;j++)
                    {
                            cout<<"Bitte geben den Boolschen Wert fuer Zeile"<<i+1<<" und Spalte "<<j+1<<"ein:";
                            cin >> Matrix[i][j];
    }
    }
    }
    
    void RechteckMatrix::output()
    {
         for(int i=0;i<x;i++)
         {
                 for(int j=0;j<x;j++)
                 {
                         if(Matrix[i][j] == 1)
                         {
                         cout << "X";
                         }
                         else
                         {
                             cout <<" ";
                             }
                             }
                             }
                             }
    
    int main()
    {
        int entscheidung;
    
        do
        {
            cout <<"Geben Sie bitte ein ob sie eine Rechteckige Matrix oder eine quadratische Matrix berechnen wollen\n";
            cout <<"1 für eine quadratische Matrix\n";
            cout <<"2 für eine quadratische Matrix\n";
            cout <<"0 um das Programm zu verlassen\n";
            cin >> entscheidung;
    
    switch(entscheidung)
    {
                        case 'q':  
                                   QuadratMatrix Q1;
                                   Q1.MatrixA();
                                   Q1.input();
                                   Q1.output();
                                   break; 
    
                        case 'r': 
                                   RechteckMatrix R1;
                                   R1.MatrixA();
                                   R1.input();
                                   R1.output();
                                   break; 
                        case 0:    
                                   cout<<"\n Ihr Wunsch ist mir Befehl, einen schönen Tag auf Wiedersehen \n";
                                   break;
    
                        default:   cout<<"Eingabefehler das Programm wird beendet\n";
                                   break;
    }
    }
    while(entscheidung);
    system("pause");
    }
    

    Bekomme beim komilieren diese Fehlermeldung:

    **enters scope of NON-POD !QuadratMatixQ1
    jump to case lable

    an was kann das liegen 😕

    würde mich über lösungsvorschläge freuen

    mfg

    fipo144
    den selben Fehler für die Rechteck case Fall**



  • Hi,

    case 'r':
                                   {
                                         RechteckMatrix R1;
                                         R1.MatrixA();
                                         R1.input();
                                         R1.output();
                                   }
                                   break;
    

    so funktionierts...

    Interessant ich kannte dies selber nicht und anscheinend funktioniert es auch nur nicht, wenn die Klassen Member haben.
    Würde auch gern wissen, wieso sich case-blöcke und Benutzerdefinierte Objekte nicht mögen...

    Edit: Ist doch bei anderen Typen auch so, wahrscheinlich spinnt da irgendwas mit den Gültigkeitsbereichen und man muss deshalb die geschweiften Klammern rum machen.



  • Hallo

    ja das ist es, ein case-Block ist kein eigener Scope/Gültigkeitsbenreich. Deshalb ist es ohne zusätzliche geschweifte Klammern nicht möglich, in einem case-Block eine Variable zu deklarieren. Denn theoretisch könnte diese Variable ja dann auch nach den case-Blöcken und der switch-Anweisung verwendet werden. Doch wenn zur Laufzeit nicht dieser entsprechende case-Block mit der Deklaration aufgerufen wird, sondern ein andere ohne, dann gibt es ja gar keine Variable die nach dem case immer benutzt werden kann...
    Deshalb muß da ein extra scope aufgemacht werden.

    bis bald
    akari


Anmelden zum Antworten