stringstream运算符输入失败

时间:2017-05-11 22:18:56

标签: c++ parsing stringstream

这个重载运算符有什么问题?

我正在尝试将stringstream解析为具有成员abc为整数的对象。

istream& operator>> (istream& in, Feedback& object) {
    cout << __PRETTY_FUNCTION__ << endl;
    in >> object.a;
    in >> object.b;
    in >> object.c;
    cout << object.a << " " << object.b << " " << object.c << endl;
    return in;
}

最后cout为所有成员打印0。

我可以看到stringstream在此代码中的输入操作符之前已正确填充...

cout << __PRETTY_FUNCTION__ << ": " << ss.str().c_str() << endl;
ss >> feedback;

cout打印:

Feedback parseFeedbackData(unsigned char*, int): 10 2 4

输出重载运算符正常工作。您可以在下面找到以下代码:

ostream& operator<< (ostream& out, Feedback& object) {
    cout << __PRETTY_FUNCTION__ << endl;
    out << object.a << " " << object.b << " " << object.c;
    return out;
}

1 个答案:

答案 0 :(得分:0)

ss.str().c_str()的输出不一定能给出istringstream对象的其他状态的线索。

您应该添加测试以确保读取成功。

istream& operator>> (istream& in, Feedback& object) {
    cout << __PRETTY_FUNCTION__ << endl;

    if ( !(in >> object.a) )
    {
       cout << "Problem reading a\n";
       return in;
    }

    if ( !(in >> object.b) )
    {
       cout << "Problem reading b\n";
       return in;
    }

    if ( !(in >> object.c) )
    {
       cout << "Problem reading c\n";
       return in;
    }

    cout << object.a << " " << object.b << " " << object.c << endl;
    return in;
}

这将帮助您找出问题所在。