Я пытаюсь выяснить, как написать перегруженный оператор для моего класса Vector2d, который позволяет мне умножать на скаляр с левой и правой сторон.
class Vector2d
{
double _x;
double _y;
public:
Vector2d(double x = 0, double y = 0) :_x(x), _y(y) {}
Vector2d operator*(const double s) const
{ return Vector2d(_x * s, _y * s); }
friend Vector2d operator*(const double s, const Vector2d& v);
};
Vector2d operator*(const double s, const Vector2d& v)
{
return Vector2d(v._x * s, v._y * s);
}
Если я определю только оператор-член *, мой объект можно умножить справа на скаляр, но не на левый.Если я добавляю оператор функции друга *, я получаю сообщение об ошибке при компиляции:
Vector2D.h:61: multiple definition of `Gf::operator*(double, Gf::Vector2d const&)'
Vector2D.h:61: first defined here
Vector2D.h:61: multiple definition of `Gf::operator*(double, Gf::Vector2d const&)'
Как правильно это сделать?
Я помещал функцию оператора *в заголовочном файле.Как только я переместил его в .cpp, он скомпилировался правильно.