C ++重载问题

时间:2014-04-14 18:36:15

标签: c++ operator-overloading

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

bool operator<= (Vector3 v) {
    if (x <= v.x) && (y <= v.y) && (z <= v.z) {
        return true;
    }
}

错误是

19 |错误:'('token |

之前的预期标识符

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

之前

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

感谢您阅读

4 个答案:

答案 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](在你的逻辑中不是这种情况)。