如何允许在类声明中定义的成员函数被所述类的常量对象调用

时间:2015-07-30 09:11:12

标签: c++ operator-overloading

我在命名空间文献中有一个Book类,以下声明实现对不起作用:

namespace literature
{
    class Book{
    public:
        //Getter method
        Condition check(){return status;} const

        bool operator==(const Book&);
        bool operator!=(const Book&);
    }
}

逻辑超载的声明:

namespace literature{
    bool Book::operator==(const Book& right)
    {return true;}

    bool Book::operator!=(const Book& right)
    {return false;}
}

由于某些原因,运算符!=的实现有效,而==的实现没有,而是声明==重载的原型返回{{1而不是const bool

2 个答案:

答案 0 :(得分:0)

我终于找到了问题,但我没有为其他人删除这篇文章。事实证明问题出在上一行:

Condition check() {return status;} const

bool operator==(const Book&);

对于其他有同样问题的人,如果你想在一个类的声明中定义一个函数并允许所述类的const对象调用它,你应该做以下事情:

Condition check() const {return status;}

bool operator==(const Book&);

答案 1 :(得分:0)

虽然J.Alvaro.T的答案显示了为克服他的问题所采取的措施。但答案文字具有误导性。主要问题是这行代码:

Condition check() {return status;} const

语法错误。目的是使这个方法成为一个const方法,并且const关键字应该出现在函数体之前。函数体之后的任何字符都不会被解析为函数定义的一部分,并成为下一个语句的一部分。