Przeciazanie operatora

0

Witam!
Mam problem z przeciążeniem operatora operator*. Kod:


class foo
{
    public:
        foo()
            {m_value = 0;}
        foo(double a_value)
            {m_value = a_value;}

        foo operator*(const foo& rhs);
        foo& operator=(const foo& rhs);

        double m_value;
};

foo foo::operator*(const foo& rhs)
{
    return foo(m_value * rhs.m_value);
}

foo& foo::operator=(const foo& rhs)
{
    m_value = rhs.m_value;
    return *this;
}

int main()
{
    foo a(5);
    foo b(4);
    foo c = a * b;  //ok
    foo d = a * 2;  //ok
    foo e = 2 * a;  //tu pojawia sie problem
    return 0;
}

 

i właśnie, w zaznaczonej linii wyrzuca mi
error: no match for 'operator*' in '2 * a'

Co należny zrobić aby można było napisać to w ten sposób?

Z góry dziękuje za odpowiedz

0
friend  foo operator*(const int x, const foo& rhs){
  return foo(x * rhs.m_value);
}
0

Dzięki wielkie!
Tyle tylko ze zapomniałem dodać: w programie i tak nie mogę używać typów wbudowanych. Jedyne co mogę użyć to 2 razy double - w konstruktorze i przy:

double m_value;
 

Użycie int wiec odpada ;/

0

jeśli foo() ma konstruktor przujmujący tego doubla za parametr to wydaje mi się że mozesz tam wrzucic foo() zamiast tego inta i zadziała.

0

Dzięki, działa tak jak trzeba.

1 użytkowników online, w tym zalogowanych: 0, gości: 1