Mariana Băeșu
Mariana Băeșu

Reputation: 1

Adding two complex numbers using classes

So, I have found this code in a book:

class complex
{ 
    public:
        float x,y;
        complex(float a, float b) // CONSTRUCTOR
        {
            x=a; y=b;
    }
    complex sum (complex z)
    {
        ***complex c;*** // i get the error here
        c.x=x+z.x;
        c.y=y+z.y;
        return c;
    }
};

This code is supposed to help me sum 2 complex numbers, like this:

int main ()
{   
    complex a(1,2),b(1,1),c; // first number in paranthesis is the real part, the 
                             // second one is the imaginary part
    c=a.sum(b) ; // c should get the value of a+b (c.x=2, c.y=3)
    return 0;
}

But everytime I try to compile it I get this error: "no matching function for call to complex::complex()" Why? What should I do ?

Upvotes: 0

Views: 516

Answers (1)

An0num0us
An0num0us

Reputation: 961

You defined your own constructor, therefore the default constructor is defined as complex() = delete;. You either need your own constructor or force the default one to be created

class complex
{
public:
    float x = 0;
    float y = 0;

    complex() = default; // Compiler will generate the default constructor
    complex(float a, float b): x(a), y(b) {}

    complex sum (complex z)
    {
        complex c;
        c.x=x+z.x;
        c.y=y+z.y;
        return c;
    }
};

Instead of creating sum member function, I would create non-member operator+

// No need to make it friend because you declared x and y as public
complex operator+(complex const& a, complex const& b) {
    return complex(a.x + b.x, a.y + b.y);
}

and use it like this

complex a(3, 4), b(5, 6);
complex c = a + b;

Upvotes: 1

Related Questions