我在命名空间文献中有一个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
答案 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关键字应该出现在函数体之前。函数体之后的任何字符都不会被解析为函数定义的一部分,并成为下一个语句的一部分。