2016-11-19 5 views
0

私は動的に作成されたキューを持っており、>>演算子をオーバーロードしようとしています。しかし、私が入力する数字は間違っています。私が間違っていることを推測しますか? (< <オペレータはうまく動作します)。 だから私のクラスには、次のとおりです。配列アイテムのistream&operator >>を正しく設定する方法は?

class queue 
{ 
    int queue1[100]; 
    int rear1,front1, num1; 
public: 
    queue(): rear1(-1),front1(-1){}; 
    queue(int , int , int); 

    void insert1(int); 
    void delet1(); 

    friend istream& operator>>(istream& in, queue& obj); 

    friend ostream& operator<<(ostream& out, const queue& obj); 
    void queue::printOn(ostream &out) const; 

}; 

と機能のオペレータ自身:

istream& operator>>(istream& in, queue& obj){ 
    in >> obj.queue1[obj.rear1++]; 
    cout <<"inserted: " << obj.queue1[obj.rear1]; 
    return(in); 
} 

と私の主な目的球は次のとおりです。

queue qu1; 
cout<<"Entered number:"; 
cin>>qu1; 
cout << qu1; 

これは、プログラムがどのように動作するかです:

入力番号:5

しかし

挿入

:挿入-858993460

:-858993460

+2

あなたは 'rear1 ++'を行ったので、最後の要素の後にオブジェクトを印刷しています。 "obj.queue1 [obj.rear1-1]; – Franck

+0

なぜあなたは(すでに非常に長い)質問タイトルで「正しく」呼び出すのですか?それは何を追加するのですか? –

+0

ええ、助けて、入力した番号を印刷します。しかし、私がキューのように出力しようとすると: 'cout << qu1;' それでも-858993460の番号が表示されます。 – yTpo

答えて

0

obj.rear1++は現在を返します。、


ので、初めてで

in >> obj.queue1[obj.rear1++];を使用し、これは未定義の動作ですin >> obj.queue1[-1];

になります。

cout <<"inserted: " << obj.queue1[obj.rear1];は初期化されていないメモリ、また、未定義の動作からcout <<"inserted: " << obj.queue1[0];

この読み取りになります。


++obj.rear1への変更obj.rear1++は、これら二つの問題を解決することができます。

0

それは未定義の動作です:

in >> obj.queue1[obj.rear1++]; 
cout <<"inserted: " << obj.queue1[obj.rear1]; << rear1 is 1 more than above 
関連する問題