如何将无效的操作数固定为二进制表达式

时间:2019-06-16 04:22:20

标签: c++ operator-overloading

我有一个包含属性的类,该属性本身就是一个类。我正在尝试为父类构建比较运算符,并且在编写比较器代码以检查子属性的属性是否相等时遇到错误。孩子本身可以正确编译。我无法理解的错误是:

error: invalid operands to binary expression ('const struct wb_odometry' and 'const struct wb_odometry')

(而胡萝卜位于==下。)

如果双方都是const且类型相同,为什么会有问题?有人可以帮我解决这个问题吗?

该错误发生在如下所示的类层次结构中,该层次结构旨在构建为C或C ++代码。 PROPERTY宏为指定的属性类型定义获取器和设置器。

wb_odometry.h(C)

struct wb_odometry
{
    PROPERTY(float, forward)
    PROPERTY(float, left)
    PROPERTY(float, turn)
};

=========================

wb_motion_status.h(C)

#include "wb_odometry.h"

struct wb_motion_status
{
    PROPERTY(enum MotionState, motionState)
    PROPERTY(struct wb_odometry, motionOdometry)
    PROPERTY(bool, resetOdometry)
};

=========================

Odometry.h(C ++)

#include "wb_odometry.h"

class Odometry: public wb_odometry {

    inline bool operator== (const Odometry& a) const {
        return (fabs(static_cast<double>(forward() - a.forward())) < DBL_EPSILON &&
                fabs(static_cast<double>(left() - a.left())) < DBL_EPSILON &&
                fabs(static_cast<double>(turn() - a.turn())) < DBL_EPSILON);
    }
};

=========================

MotionStatus.h(C ++)

#include "wb_motion_status.h"
#include "Odometry.h"

class MotionStatus: public wb_motion_status {


    bool operator== (const MotionStatus &other) const {
        v==== ERROR NEXT LINE
        bool odometryEqual = motionOdometry() == other.motionOdometry();
        return motionState() == other.motionState() &&
               resetOdometry() == other.resetOdometry() &&
               odometryEqual;
    }
};

1 个答案:

答案 0 :(得分:2)

您为operator==定义了class Odometry,但没有为struct wb_odometry定义一个。由于您的相等性测试在两个wb_odometry对象之间,因此编译器不知道如何比较它们。

最简单的(?)解决方法是定义一个全局operator==以比较两个wb_odometry对象,在这种情况下,它们实际上是您的Odometry::operator==但有两个{{1} }参数。