课程问题,增加一天

tri*_*ker 0 c++ linker date

我正在尝试使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();
}
Run Code Online (Sandbox Code Playgroud)

我收到一个链接器错误undefined reference to Date::Date(int,int,int),但我无法弄清楚是什么问题.看起来它与Date构造函数有关,但我不确定是什么.

我还想为明天添加一行代码

Date tomorrow = today.add_day(1);
Run Code Online (Sandbox Code Playgroud)

但我有一种感觉,因为add_day是一个无效类型会有转换问题.

任何帮助将不胜感激 - 谢谢.

PS不要担心在月底增加天数.这将是以后实施的.

Jes*_*ogt 6

链接器错误是因为您没有定义构造函数.

Date::Date( int yr, int mo, int day ) : y(year), m(month), d(day)
{
}
Run Code Online (Sandbox Code Playgroud)

对于add_day问题:您是正确的,您需要更改返回类型.它应该返回一个Date对象.您可以构造一个新的Date对象并返回日值增加或只增加日值并返回*this.