这是我第一次尝试在c ++中进行重载(当然还在学习),我不太清楚为什么这段代码会出错?
bool operator<= (Vector3 v) {
if (x <= v.x) && (y <= v.y) && (z <= v.z) {
return true;
}
}
错误是
19 |错误:'('token |
之前的预期标识符和
19 |错误:预期';'在'('token |
之前我搜索了这两个,发现第一个是函数之外的代码(它不是),但是第二个没有找到任何东西。
感谢您阅读
答案 0 :(得分:8)
除了操作员的逻辑之外,你似乎错过了if
中的一组括号。这将在语法上正确:
if ( (x <= v.x) && (y <= v.y) && (z <= v.z) )
但你真正应该做的是简化整个过程并避免不必要的if
:
bool operator<= (Vector3 v) {
return (x <= v.x) && (y <= v.y) && (z <= v.z);
}
最后,比较成员函数应该是const
,因为在比较它时修改某些东西是没有意义的。此外,您可能希望通过引用传递参数,但这取决于Vector
的大小以及复制它的成本。
bool operator<= (const Vector3& v) const
{
return (x <= v.x) && (y <= v.y) && (z <= v.z);
}
答案 1 :(得分:1)
还添加到其他答案中,如果不是真的话,你的语句会返回什么,c ++默认情况下不会返回任何内容,这就是为什么最好返回操作结果
return (x <= v.x) && (y <= v.y) && (z <= v.z);
答案 2 :(得分:0)
if语句中的条件应括在括号中。所以有效的if语句看起来像
if ( (x <= v.x) && (y <= v.y) && (z <= v.z) ) {
最好以下列方式定义运算符
bool operator <=( const Vector3 &v ) const
{
return ( ( x <= v.x ) && ( y <= v.y ) && ( z <= v.z ) );
}
答案 3 :(得分:0)
注意:您可能会考虑这个:
inline bool operator<= (const3 Vector& u, const Vector3& v) {
if(u.x < v.x) return true;
if(u.x == v.x) {
if(u.y < v.y) return true;
if(u.y == v.y) {
if(u.z <= v.z) return true;
}
}
return false;
}
这里有一个独立的二进制函数,它通过常量引用获取参数以避免不必要的副本。此外,逻辑被改变(x具有比y更高的等级,并且y具有比z更高的等级)。这使得[1,1,1]小于[1,1,2](在你的逻辑中不是这种情况)。