我正在尝试使 add_day
函数正常工作,但我遇到了一些问题。请注意,我无法对 struct
进行任何更改(它非常简单),因为练习的目的是让程序根据给定的内容工作。代码是
#include "std_lib_facilities.h"
struct Date{
int y, m, d;
Date(int y, int m, int d);
void add_day(int n);
};
void Date::add_day(int n)
{
d+=n;
}
ostream& operator<<(ostream& os, const Date& d)
{
if(d.m<1 || d.m>12 || d.d<1 || d.d>31) cout << "Invalid date: ";
return os << '(' << d.y
<< ',' << d.m
<< ',' << d.d << ')';
}
int main()
{
Date today(1978,6,25);
today.add_day(1);
cout << today << endl;
keep_window_open();
}
我收到一个链接器错误,提示 undefined reference to Date::Date(int,int,int)
,但我不知道哪里出了问题。这似乎与 Date
构造函数有关,但我不确定是什么。
我还想为明天添加一行代码
Date tomorrow = today.add_day(1);
但我有一种感觉,因为 add_day 是一个 void 类型,所以会有一个转换问题。
如有任何帮助,我们将不胜感激 - 谢谢。
附言不要担心在月底添加天数。这是稍后要实现的事情。
最佳答案
链接器错误是因为您没有定义构造函数。
Date::Date( int yr, int mo, int day ) : y(year), m(month), d(day)
{
}
对于 add_day 问题:您说得对,您需要更改返回类型。它应该返回一个 Date 对象。您可以构造一个新的 Date 对象并返回它并增加日期值,或者只增加日期值并返回 *this。
关于c++ - 类(class)问题,加一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1126812/