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

How to allow a member function that's defined inside the class declaration to be called by constant objects of said class

本文关键字:常量 调用 对象 函数 成员 声明 何允许 定义      更新时间:2023-10-16

我在命名空间文献中有一个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;}
}

由于某种原因,操作符!=的实现工作,而==的实现不工作,而是声明==过载的原型返回const bool而不是bool

尽管J.Alvaro.T的回答显示了克服他的问题所做的工作。但答案文本具有误导性。主要问题是这行代码:

Condition check() {return status;} const

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

我终于发现问题了,我不会替别人删除这篇文章。原来问题出在前一行

Condition check() {return status;} const
bool operator==(const Book&);

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

Condition check() const {return status;}
bool operator==(const Book&);