C++ 重载:从友元函数切换到成员函数

C++ overloading: switching from friend to member function

我有这段代码,我希望从友元函数切换到成员函数:

inline bool operator< (const MyClass& left, const MyClass& right)
{
    return (((left.value == 1) ? 14 : left.value) < ((right.value == 1) ? 14 : right.value));
}

inline bool operator> (const MyClass& left, const MyClass& right)
{
    // recycle <
    return  operator< (right, left);
}

我已经走到这一步了:

inline bool MyClass::operator< (const MyClass& right)
{

    return (((this->value == 1) ? 14 : this->value) < ((right.value == 1) ? 14 : right.value));
}

inline bool MyClass::operator> (const MyClass& right)
{
    // recycle <
    return  right.operator<(*this);
}

然而,VC++ 给我这个抱怨:

cannot convert 'this' pointer from 'const MyClass' to 'MyClass &'

我该如何解决这个问题?另外,我的operator>写对了吗?

你的两个运算符都应该是 const class 方法:

inline bool MyClass::operator< (const MyClass& right) const
{

    return (((this->value == 1) ? 14 : this->value) < ((right.value == 1) ? 14 : right.value));
}

inline bool MyClass::operator> (const MyClass& right) const
{
    // recycle <
    return  right.operator<(*this);
}

请注意,在 > 重载中,rightconst MyClass &

因此,right.operator<要求<运算符是constclass方法,因为right是const。当您使用 const 对象玩游戏时,您只能调用其 const 方法。您不能调用其非 const 方法。