2017-04-30 22 views
0

>>演算子のオーバーロードに問題があり、正しい演算方法が見つからないようです。オーバーロード>>演算子と読み込みChar(C++)

私は、ファイルを開き、文字を読み、その文字に基づいてオブジェクトの変数を変更することになっています。

私の問題がどこではわかりませんが、回答が見つかりません。どんな助けでも大歓迎です。

istream &operator >> (istream &strm, RNode &obj) { 

    char tempChar = nullptr; 

    strm >> tempChar; 

    if (tempChar == '#') { 

     obj.setReservationStatus(true); 
    } 

    else obj.setReservationStatus(false); 

    return strm; 

} 

、ここで私はそれをテストしようとしているものです:

は、ここに私の関数です。私たちは映画予約システムを作っているので、空席です。予約された座席です。考え方は、それがどの文字かを確認し、次にreservationStatusを変更することです。

fs.open("auditorium1.txt", ios::in); 

RNode *tempNode; 
fs >> tempNode; 

cout << tempNode.getReservationStatus(); 

私は 『演算子>>』の「いいえマッチ言わない、それは私のデータ私が使用することができますタイプと理由私はできないの束を与えるエラーが発生します。

どのようにすることができます高度で

おかげ?この問題を解決する。

+1

。 'RNode * tempNode;'を 'RNode tempNode;'に変更してください。 – songyuanyao

+0

@songyuanyao Wow。それはうまくいった。それがうまくいった理由についてもっと説明できますか? –

+0

'RNode * 'ではなく' RNode'を期待する 'operator >>'のパラメータ型をチェックしてください。 BTW: 'operator >>' aloはパラメータとしてポインタを取ると宣言することはできません。 – songyuanyao

答えて

0
RNode *tempNode; 
fs >> tempNode; 

権利ではありません。関数はオブジェクトへの参照を期待していたときに、ポインタを使用することはできません。あなたはその行のコンパイルエラーを取得する必要があります。それがあるべき

RNode tempNode; 
fs >> tempNode; 

また、operator>>機能では、

char tempChar = nullptr; 

は右ではありません。ポインタの初期化にはcharではなく、nullptrを使用する必要があります。

あなたはに機能を簡素化することができます:あなたは、 `演算子>>`と `すなわちのrnode *`をポインタを使用することはできません

std::istream& operator>>(std::istream &strm, RNode &obj) { 

    char tempChar; 

    strm >> tempChar; 

    obj.setReservationStatus(tempChar == '#'); 

    return strm; 
} 
+0

ありがとうございます。これは私の問題を解決しました。 –

関連する問題