gpt4 book ai didi

c++ - 重载 >> 运算符未在输入上设置属性

转载 作者:行者123 更新时间:2023-11-28 04:19:44 25 4
gpt4 key购买 nike

我是 C++ 的新手,并试图通过重载 >> 运算符从 cin 读入我的对象。但是,输入后,我创建的对象保持不变。

标题:

class Duration {
private:
int hours, mins, secs;

public:
Duration();
Duration(int hours, int mins, int secs);
};

inline Duration::Duration() {
this->hours = 0;
this->mins = 0;
this->secs = 0;
}

inline Duration::Duration(int hours, int mins, int secs) {
this->hours = hours;
this->mins = mins;
this->secs = secs;
}

inline istream& operator>>(istream& is, Duration &d) {
char c1, c2;

int hours, mins, secs;

if (is >> hours >> c1 >> mins >> c2 >> secs) {
if (c1 == c2 == ':') {
d = Duration(hours, mins, secs);
}
else {
is.clear(ios_base::failbit);
}
}
return is;
}

inline ostream& operator<<(ostream& os, const Duration &d) {
return os << d.getHours() << ":"
<< d.getMins() << ":"
<< d.getSecs();
}

和我的主要:

int main(int argc, char** argv) {
Duration test;

cin >> test;

cout << test << endl;

return EXIT_SUCCESS;
}

我很确定我已经在需要的地方包含了所有“通过引用传递”的指示,但我不确定我做错了什么。无论我在运行程序时输入什么,生成的 Duration test 的值都是 0:0:0

最佳答案

if (c1 == c2 == ':') 是所指出的问题,评估为 true == ':' 当然等于 。我用 if (c1 == c2 && c2 == ':') 修复了它(不确定是否最有效,但现在肯定可以按预期工作)。

关于c++ - 重载 >> 运算符未在输入上设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55731175/

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