现在我正在为C ++代码问题绊脚石。
我做了一个简单的结构'Vector3',因为我定义了operator +。 当我在const函数中使用该运算符时,它会显示一条红线。
struct Vector3 {
float x, y, z;
Vector3 operator+ (const Vector3 v) {
return Vector3(x + v.x, y + v.y, z + v.z);
};
Vector3(float x, float y, float z) : x(x), y(y), z(z) {};
};
// and i use it inside some const function
struct SomeST {
Vector3 a,b;
Vector3 Function() const
{
return a + b; // error
}
};
如果我从函数中删除const,它就可以工作! 因此,如果有人能够解释幕后的情况,那将是惊人的。 谢谢。
答案 0 :(得分:1)
功能
Vector3 Function() const
是常量。这意味着this
在函数内部是const。这反过来意味着a
和b
都是常量。 a + b
语法是编写a.operator + (b)
的好方法(用参数operator +
在对象a
上调用b
方法)。现在a
是const,因此a.operator +
方法也必须是const。由于您尚未提供此类运算符(您编写的运算符不是const),因此编译器会将此错误突出显示为错误,如果尝试对其进行编译,则会出现基于const的错误。
您需要提供operator + (...) const
,在这种情况下,这意味着您需要在定义中添加const
关键字:
Vector3 operator+ (const Vector3 v) const { ... }