Search code examples
c++switch-statementrecipe

Switch statement not working c++ and D:\c++ dev-c\Makefile.win recipe for target 'abc.o' failed


So, I continued working on my abc formula in c++, and yet again, some errors pop up :D

this is what I have now:

#include <iostream>
#include <cmath>
using namespace std;

class abcformule{
    public:
        int discriminant(double a, double b, double c) {
            return pow(b, 2) - 4 * a *c;
        }

        void answer(double a2, double b2, double c2) {
            int D = discriminant(a2, b2, c2);
            switch(D) {
                case < 0:
                    cout << "Discriminant is lower than 0, no solutions for x.";
                    cout << endl;
                    break;
                case > 0:
                    cout << "Discriminant is bigger than 0, two solutions for x: ";
                    cout << endl; 
                    cout << "x = " << (-b2 + sqrt(D)) / (2 * a2) <<
                            " or " << (-b2 - sqrt(D)) / (2 * a2) << 
                            "." << endl;
                    break;
                case = 0:
                    cout << "Discriminant is 0, only one solution for x: " << endl;
                    cout << (-b2) / (2 * a2) << endl;
            }
        }
};

int main(int argc, char** argv) {
    abcformule abc;
    abc.answer(5, -2, -7);
    return 0;
}

And these are the errors:

D:\c++ dev-c\abc.cpp    In member function 'void abcformule::answer(double, double, double)':
14  10  D:\c++ dev-c\abc.cpp    [Error] 'D' cannot appear in a constant-expression
18  10  D:\c++ dev-c\abc.cpp    [Error] expected primary-expression before '>' token
25  10  D:\c++ dev-c\abc.cpp    [Error] expected primary-expression before '=' token
25  12  D:\c++ dev-c\abc.cpp    [Error] an assignment cannot appear in a constant-expression

How do I fix this? Oh, and I saw this thing pop up in the error log too:

28      D:\c++ dev-c\Makefile.win   recipe for target 'abc.o' failed

Solution

  • I prefer you to use if else instead of switch because you cann't do comparisons in cases in switch

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    class abcformule{
    public:
        int discriminant(double a, double b, double c) {
            return pow(b, 2) - 4 * a *c;
        }
    
        void answer(double a2, double b2, double c2) {
            int D = discriminant(a2, b2, c2);
    
                if(D<0){
                    cout << "Discriminant is lower than 0, no solutions for x.";
                    cout << endl;
                } else if(D>0){
                    cout << "Discriminant is bigger than 0, two solutions for x:     ";
                    cout << endl; 
                    cout << "x = " << (-b2 + sqrt(D)) / (2 * a2) <<
                            " or " << (-b2 - sqrt(D)) / (2 * a2) << 
                            "." << endl;
                } else{
                    cout << "Discriminant is 0, only one solution for x: " <<          endl;
                    cout << (-b2) / (2 * a2) << endl;
                }   
        }
    };
    
    int main(int argc, char** argv) {
        abcformule abc;
        abc.answer(5, -2, -7);
        return 0;
    }