如何允许在类声明中定义的成员函数由所述类的常量对象调用
How to allow a member function that's defined inside the class declaration to be called by constant objects of said class
我在命名空间文献中有一个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&);
相关文章:
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 在 C++20 之前,在带有常量或引用字段的"A"上调用 'std::vector<A>
- 什么时候可以使用常量装饰调用我的重载函数?
- 是否可以使用非常量指针调用非常量函数,以及当两个unique_ptrs指向同一个对象时程序的行为方式?
- 函数调用在常量表达式中必须具有常量值
- 调用 cout 时如何在结构中输出常量文本?
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- Gmock 常量方法不调用,而是调用原始方法
- C++:允许临时对象调用非常量成员函数的设计理念是什么?
- 编译器错误:函数调用在常量表达式中必须有一个常量值
- 调用构造函数与将内联常量定义为默认参数
- 可作为常量调用的比较对象
- 将节点数组(可变长度)转换为常量浮点**以调用opencv.calcHist
- 为什么在这种情况下调用非常量右值移动构造函数?
- 将非左值作为常量引用参数传递.临时是在本地作用域还是在调用方作用域中创建的?
- 如何调用非常量函数而不是常量函数?
- 在常量方法中调用非常量方法
- 非常量调用 const 成员函数失败,只读位置C++
- 内联在调用always_inline"__m256d _mm256_broadcast_sd(常量双倍*)"时失败
- 使用没有显式强制转换的常量调用未定义的行为