【问题标题】:Invalid operands to binary expression 'Object' and 'Object'二进制表达式“Object”和“Object”的操作数无效
【发布时间】:2015-06-30 06:27:04
【问题描述】:

我有一个向量类

class Vector {
public:
double x, y, z;
Vector operator * (Vector& v) {
    return Vector(x*v.x, y*v.y, z*v.z);
};

类雷

class Ray {
    Vector origin, direction;
public:
    Ray();
    Ray(Vector, Vector);
    Vector getRayOrigin() { return origin; }
    Vector getRayDirection() { return direction; }
};

我有飞机课

class Plane {
public:
Vector normal;
double distance;
double Plane::hit(Ray ray) {
    Vector rayOrigin = ray.getRayOrigin();
    Vector t = normal * rayDirection; // works
    Vector tt = normal * ray.getRayOrigin(); // doesn't work
}

我不明白为什么调用 normal * ray.getRayOrigin() 不起作用 错误:二进制表达式“向量”和“向量”的操作数无效

【问题讨论】:

标签: c++


【解决方案1】:

操作失败,因为getRayOrigin() 重新调整的临时向量无法绑定到非常量引用。要解决此问题,请将 Vector& v 更改为 Vector const & v

将不将第一个操作数更改为非成员函数的运算符被认为是更好的样式:

Vector operator * (Vector const & v, Vector const & w)
{
    return Vector(v.x*w.x, v.y*w.y, v.z*v.z);
}

更多解释请参见operator overloading megathread

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多