C++ 不匹配运算符*

标签 c++ overloading operator-keyword

我想重载运算符:

static Vector operator*(float s, Vector right){
    Vector result(right.getX()*s, right.getY()*s, right.getZ()*s);
    return result;
}

当我想使用它时:

Vector a(0,1,5)
Vector v(4*a);

我得到了:

error: no match for 'operator*' (operand types are 'int' and 'Vector')

怎么了?

最佳答案

您需要声明(在类声明中)operator* 为非静态非成员和友元,例如:

friend Vector operator*(float s, Vector right);

并定义为(类声明外):

Vector operator*(float s, Vector right){
    return Vector(right.getX()*s, right.getY()*s, right.getZ()*s);
}

运算符 * 在这里用作二元运算符。如果你 make as member,那么第一个参数被隐式地作为当前对象(* 适用于它,例如,如果你使用 x * y,那么 operator * 适用于 x 作为成员)。但是,对于非成员,两个参数都可以是非 Vector 类型,并且可以根据需要转换为 Vector。 如果您将其设置为非成员非 friend 和静态(将在类声明之外定义),这甚至会起作用

关于C++ 不匹配运算符*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26194263/

相关文章:

c# - 如何在 Asp.Net MVC 2 中通过 JQuery 调用重载的 C# 函数

C++ 运算符附加类声明

c++ - 内联结构声明的大小

javascript - Websocket 握手 Sec-WebSocket-Accept header 值不正确

c++ - 为什么有人会使用 C 而不是 C++?

c++ - 使用模板类在 C++ 中重载运算符

c++ - 在与声明不同的文件中定义内联运算符

c++ - 无法在 C++ 中中断 while 循环

python - 强制特定函数签名

c++ - 编译器从 `long` 转换时,`double` 和 `int ` 相同