gmtime对于使用重载运算符读取的对象不起作用

时间:2016-01-21 15:15:25

标签: c++ oop time time-t

所以我为一个位置做了一个课程,在那里我存储它的coordonates和它的时间,在utc。我重载了>>像这样的运营商

friend ifstream& operator >>(ifstream& in, loc_list& l)
{
    char bf[40];
    in >> bf;
    l.setID(bf);
    long t=0;
    in >> l.utc;
    //l.setTime(t);
    double point;
    in >> point;
    l.p.setX(point);
    in >> point;
    l.p.setY(point);
    in >> l.speed;
    return in;

}

和<<像这样的运算符:

friend ostream& operator <<(ostream& out,const loc_list &l)
{
    out << l.id << endl;
    out << put_time(gmtime(&l.utc),"%c %Z" )<< endl;
    //out << l.utc << endl;
    out << l.p.getX() << endl;
    out << l.p.getY() << endl;
    out << l.speed;
    return out;
}

然而,&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;运算符仅在使用构造函数创建对象时才起作用。当我用cin&gt;&gt;阅读它时它打破了。 我调试了程序,但对象包含正确的数据 print from debugger

所以,有什么想法吗?

1 个答案:

答案 0 :(得分:0)

put_time的对应方为get_time

我建议使用:

std::tm tm 
in >> get_time(&tm, "%c %Z");

然后从l.utc更新tm

l.utc = mktime(&tm);