这个 init()成员函数中总显示 y,m,d 未定义的错误(VS2013)
书上的一个程序,书上的解释跟这个实际情况不一样啊。。
程序代码:
#include<iostream> #include<iomanip> using namespace std; class Date { int year, month, day; void init(); public: Date(const string& s); Date(int y = 2000, int m = 1, int d = 1); bool isLeapYear() const; friend ostream& operator<<(ostream& o, const Date& d); }; void Date::init() { if (y > 5000 || y < 1 || m<1 || m>12 || d<1 || d>31) exit(1); } Date::Date(const string& s) { year = atoi(s.substr(0, 4).c_str()); month = atoi(s.substr(5, 2).c_str()); day = atoi(s.substr(8, 2).c_str()); init(); } Date::Date(int y, int m, int d) { year = y, month = m, day = d; init(); } bool Date::isLeapYear() const { return (year % 4 == 0 && year % 100) || year % 400 == 0; } ostream& operator<<(ostream& o, const Date& d) { o << setfill('0') << setw(4) << d.year << '-' << setw(2) << d.month << '-'; return o << setw(2) << d.day << '\n' << setfill(' '); } int main() { Date c("2005-12-28"); Date d(2003, 12, 6); Date e(2002); Date f(2002, 12); Date g; cout << c << d << e << f << g; }