C++重载问题

1 c++ operator-overloading

这是我第一次尝试用c ++重载(当然还在学习),我不太清楚为什么这段代码会出错?

bool operator<= (Vector3 v) {
    if (x <= v.x) && (y <= v.y) && (z <= v.z) {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

错误是

19 |错误:'('token |之前的预期标识符

19 |错误:预期';' 在'('token |.之前

我搜索了这两个,发现第一个是函数之外的代码(它不是),但在第二个没有找到任何东西.

谢谢阅读

jua*_*nza 8

除了操作员的逻辑,你似乎错过了一组括号if.这将通过语法正确:

if ( (x <= v.x) && (y <= v.y) && (z <= v.z) )
Run Code Online (Sandbox Code Playgroud)

但你真正应该做的是简化整个过程并避免不必要的if:

bool operator<= (Vector3 v) {
    return (x <= v.x) && (y <= v.y) && (z <= v.z);
}
Run Code Online (Sandbox Code Playgroud)

最后,比较成员函数应该是const,因为在比较它时修改某些东西是没有意义的.此外,您可能希望通过引用传递参数,但这取决于Vector复制它的大小和成本.

bool operator<= (const Vector3& v) const
{
    return (x <= v.x) && (y <= v.y) && (z <= v.z);
}
Run Code Online (Sandbox Code Playgroud)