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

标签 c++ 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)
};

最佳答案

这一行是错误的。正如您所发现的。

Date rdate = date.day+1; /* <- this doesn't work */

因为您要将整数值分配给日期对象,而编译器目前不知道如何进行该转换。

您需要将值分配回 Dateday 字段,例如

date.day += 1;

这会失败,因为日期是 const

如果您希望输入参数为 const,那么您必须返回一个新的 Date 对象。您传入的是 const,无法更改。

Date addOneDay(const Date& date)
{ 
    Date d(date);
    d.day = date.day + 1;
    return d;
};

这会产生一些临时对象的成本。

如果您删除了 const 限制,您可以像这样使用相同的日期。

void addOneDay(Date& date)
{
    date.day += 1;       
};

关于C++如何使用来自另一个函数的调用来修改结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28800729/

相关文章:

c++ - 如何复制带有指向内部数据的指针的结构(以便复制指针和它们指向的数据)?

c++ - 创建或更改多页 TIFF

c - 结构接口(interface)

go - 在 Go 中附加到结构 slice

c++ - 使用 make 将 Qt 库复制到输出目录

c++ - 在单独的文件夹中生成依赖文件

c++ - 如何声明一个接受任意大小的二维 vector 参数?

c - Glibc 损坏的双链表

c - 如何在 C 中声明指向结构的指针数组然后使用它?

c - 8 位输入给出奇怪的行为,因为 16/32 位给出小端/大端