gpt4 book ai didi

c++ - 重载时出现堆栈溢出 >> 为类调用运算符函数。我需要做哪些改变?

转载 作者:行者123 更新时间:2023-11-30 03:25:42 25 4
gpt4 key购买 nike

下面是>>运算符重载的类文件。

class Timepoint {
public:
Timepoint();
Timepoint(unsigned short yearValue = 9999, unsigned short month = 12, unsigned short date = 31, unsigned short hour = 23, unsigned short minute = 59);
~Timepoint();
unsigned short get_dayOfYear();
void operator++();
friend std::ostream& operator<<(std::ostream& out, const Timepoint& timepoint);
friend std::istream& operator>>(std::istream&, const Timepoint&);

private:
unsigned short dayOfYear;
unsigned short year;
unsigned short time;
const static short days[];
};

下面是触发堆栈溢出错误的重载函数。我必须将时间作为用户的时间戳并存储在对象数据中。当控制权到达此函数时,将触发堆栈溢出。

std::istream& operator>>(std::istream& in, const Timepoint& timepoint)
{
int day, month, hour, minute;
std::string timestamp;
in >> timestamp;
std::stringstream ss(timestamp);
ss >> timepoint.year;
ss.ignore();
ss >> month;
ss.ignore();
ss >> day;
ss.ignore();
ss >> hour;
ss.ignore();
ss >> minute;

const_cast<Timepoint&>(timepoint).dayOfYear = timepoint.days[month] + day;
const_cast<Timepoint&>(timepoint).time = hour * 60 + minute;
return in;
}

最佳答案

ss >> timepoint.year 解释为

ss >> Timepoint(timepoint.year);

这是读入 const unsigned short 的唯一可行方法。这当然会导致无限递归。

这里的根本原因是,您莫名其妙地将一个 const 对象传递给一个明确目标是修改该对象的函数。只需删除 const

您可能还想使构造函数显式,以避免此类意外转换。

关于c++ - 重载时出现堆栈溢出 >> 为类调用运算符函数。我需要做哪些改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48852309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com