I'm creating a complex struct which overloads operators +,*,-,...etc. I've written the following code:
struct complex{
    double re;
    double im;
    complex& operator+(const complex& c){
        return complex{this->re + c.re, this->im + c.im};
    }
    
    complex& operator+(const double d){
        return complex{this->re + d, this->im};
    }
    // operator overload for double + complex?
    complex& operator*(const complex& c){
        complex cx;
        cx.re = this->re*c.re - this->im*c.im;
        cx.im = this->re*c.im + this->im*c.re;
        return cx;
    }
};
Which gives me a couple issues:
- The first two methods (both) give me object has an uninitialized const or reference memberandinitial value of reference to non-const must be an lvalueerrors. I assume this is because I've initialized thecomplexobject and am returning it in the same statement, and it expects a reference, but I'm not returning an lvalue. Is this correct?
- There are three scenarios in which I'd be adding: complex + complex,complex + double, anddouble + complex. How would I write the method for adouble + complexwhen the first element is not of typecomplex?
- Considering I plan on overloading multiple operators, must I overload them for all three cases (i.e. for multiplication, complex * complex,complex *the double, anddouble * complex)? This seems like a lot of unnecessary code, is there a better way to implement this?
