我正在尝试了解如何编写可以修改struct
的函数。我想在struct
日期添加一天。但是,下面的addOneDay
函数不起作用。
我的目标是addOneDay
到我的生日,使用一个功能。如何操作结构中的数据以使addOneDay
起作用?
#include <iostream>
using namespace std;
struct Date
{
int year;
int month;
int day;
};
Date addOneDay(const Date& date);
Date addOneDay(const Date& date)
{
Date rdate = date.day+1; /* <- this doesn't work */
return rdate;
};
void assignValues(Date& myBirthday)
{
myBirthday.day = 27;
myBirthday.month = 1;
myBirthday.year = 1962;
}
main()
{
Date x;
assignValues(x);
cout << x.month << "/" << x.day << "/" << x.year << endl;
//addOneDay(x)
};
答案 0 :(得分:3)
“如何操作结构中的数据以使addOneDay正常工作?”
它不起作用,因为您传递了const
引用参数,这实际上意味着参数无法更改。解决方案是实际使用return
值
Date addOneDay(const Date& date);
Date addOneDay(const Date& date) {
Date rdate(date);
rdate.day = rdate.day + 1;
return rdate;
};
答案 1 :(得分:3)
这条线错了。你发现了。
Date rdate = date.day+1; /* <- this doesn't work */
因为您要为日期对象分配一个整数值,因此编译器不知道如何进行转换。
您需要将值分配回day
的{{1}}字段,如
Date
此操作失败,因为日期为date.day += 1;
。
如果您希望输入参数为const
,则必须返回一个新的Date对象。您传入的是const
,不能更改。
const
这会导致一些临时对象的成本。
如果您删除了Date addOneDay(const Date& date)
{
Date d(date);
d.day = date.day + 1;
return d;
};
限制,则可以使用相同的日期。
const