【问题标题】:Error C2677: binary '*': no global operator found错误 C2677:二进制“*”:未找到全局运算符
【发布时间】:2020-01-28 09:03:26
【问题描述】:

很抱歉问了以前有人问过的类似问题,但我无法理解答案。

头文件

    float Dot(const Point& other) const;

CPP

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

我收到错误 C2677: binary '*': no global operator found

有什么问题??

【问题讨论】:

  • DotPoint::operator* 有什么关系?请发帖minimal reproducible example
  • 你有点和点,它们是什么关系? mX 和 mY 是从哪里来的?
  • 另外,这只是错误消息的一部分。
  • 请提供显示此问题的最小完整(可编译)源代码 sn-p。您可以将其发布到例如coliru.stacked-crooked.com 或 godbolt.org 或类似网站。
  • 不,那些在线编译器很好,但 SO 指南要求问题中包含相关信息。作为新用户,也请带上tour阅读How to Ask

标签: c++ c++11 c++14 c++17


【解决方案1】:

您在 cpp 文件中实现了operator*,但在头文件中您只声明了一个简单的Dot 函数。

您要么在头文件中移动 operator* 内联,要么在头文件中为其添加声明,即:

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* 声明为全局运算符,如上所示。此外,我认为您可能会将点积与乘法 (operator*) 混淆,它具有两个非常不同的结果,还请注意一个是标量运算(在任何维度上),另一个是点,在这种情况下,是二维的.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    相关资源
    最近更新 更多