Вы реализовали operator*
в файле cpp, но в файле заголовка вы объявили только простую функцию Dot
.
Вы либо перемещаете оператор * inline в файле заголовка, либо добавляете объявление для него в заголовочном файле, ie:
Class Point {
[...]
Point operator*( float operand ) const {
return Point( mX * operand, mY * operand) );
}
};
Этот оператор, определенный таким образом, является оператором-членом , потому что вы объявили внутри самого класса. Вы также можете добавить глобальный оператор , например оператор сравнения, который вы поместите вне вашего объявления класса, например:
Class Point {
[...]
Point operator*( float operand ) const {
return Point( mX * operand, mY * operand) );
}
};
bool operator==(const Point& left, const Point& right)
{
return left.value == right.value;
};
Заключительная мысль:
Итак, если вспомнить полученную ошибку, скорее всего, это означает, что вы не 'объявили operator*
глобальным оператором, как показано выше. Также я думаю, что вы могли бы спутать скалярное произведение с умножением (оператор *), который содержал два совершенно разных результата, также обратите внимание, что один - скалярная операция (в любом измерении), другой - точка, в данном случае двухмерное .