C ++如何使用来自另一个函数的调用来修改结构

时间:2015-03-01 23:53:18

标签: c++ struct

我正在尝试了解如何编写可以修改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)
};

2 个答案:

答案 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