我有一个包含属性的类,该属性本身就是一个类。我正在尝试为父类构建比较运算符,并且在编写比较器代码以检查子属性的属性是否相等时遇到错误。孩子本身可以正确编译。我无法理解的错误是:
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;
}
};
答案 0 :(得分:2)
您为operator==
定义了class Odometry
,但没有为struct wb_odometry
定义一个。由于您的相等性测试在两个wb_odometry
对象之间,因此编译器不知道如何比较它们。
最简单的(?)解决方法是定义一个全局operator==
以比较两个wb_odometry
对象,在这种情况下,它们实际上是您的Odometry::operator==
但有两个{{1} }参数。