Ошибка C2677: двоичный файл '*': глобальный оператор не найден - PullRequest
0 голосов
/ 28 января 2020

Извините за задание аналогичного вопроса, который задавался ранее, но я не смог понять ответы.

Заголовочный файл

    float Dot(const Point& other) const;

CPP

Point Point::operator*(float operand) const
{
    return Point(mX * operand, mY * operand);
}

и я получаю сообщение об ошибке C2677: двоичный файл '*': глобальный оператор не найден

в чем проблема ??

1 Ответ

0 голосов
/ 28 января 2020

Вы реализовали 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* глобальным оператором, как показано выше. Также я думаю, что вы могли бы спутать скалярное произведение с умножением (оператор *), который содержал два совершенно разных результата, также обратите внимание, что один - скалярная операция (в любом измерении), другой - точка, в данном случае двухмерное .

...