这个重载运算符有什么问题?
我正在尝试将stringstream
解析为具有成员a
,b
和c
为整数的对象。
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;
}
答案 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;
}
这将帮助您找出问题所在。