2017-05-11 18 views
0

このオーバーロードされた演算子で何が問題になっていますか?stringstream演算子の入力に失敗しました

a,b、およびcというメンバを整数として持つオブジェクトに対して、stringstreamを解析しようとしています。

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

これは問題ではありませんが、実際には 'std :: endl'が行う余分なものが必要ですか? '' \ n ''は行を終わらせます。 –

答えて

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; 
} 

これは、問題がどこにあるかを把握するのに役立ちます。

+1

または、デバッガのコードをステップ実行してみましょう! –

+0

ありがとうございます。期待どおり、最初のifで返されます。 –

関連する問題