153 27 C:\Users\ASUS\Desktop\papers\c++\CLionProjects\week_15\date.cpp [Error] passing 'const Date' as 'this' argument of 'bool Date::is_valid()' discards qualifiers [-fpermissive]
时间: 2023-07-08 13:55:53 浏览: 82
这个错误是因为 `is_valid()` 函数没有被声明为 const 函数。在重载运算符 `<<` 的时候,我们将 `Date` 对象声明为了 `const Date&` 形式,这就意味着不能修改这个对象的状态,所以调用的成员函数也必须是 const 函数。
因此,我们只需要在 `is_valid()` 函数的声明中加上 `const` 关键字即可:
```cpp
bool is_valid() const {
// ...
}
```
修改后的代码如下:
```cpp
#include <iostream>
using namespace std;
class Date {
private:
int year, month, day;
public:
Date(int y = 1970, int m = 1, int d = 1) {
year = y;
month = m;
day = d;
}
bool is_valid() const {
if (year < 1970 || year > 9999 || month < 1 || month > 12 || day < 1 || day > 31) {
return false;
}
if (month == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
if (day > 29) {
return false;
}
} else {
if (day > 28) {
return false;
}
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
if (day > 30) {
return false;
}
}
return true;
}
friend ostream& operator<< (ostream& os, const Date& date) {
if (date.is_valid()) {
os << date.year << "-" << date.month << "-" << date.day;
} else {
os << "Invalid date";
}
return os;
}
};
int main() {
Date a(2021, 10, 31);
cout << "当前日期已设置为:" << a << endl;
return 0;
}
```
这样就可以通过编译了。
阅读全文