2017-10-30 3 views
-1

私はプロジェクトを持っていて、私のクラスのメソッドの1つは、deque、mydequeをpop_frontすることになっています。メインでone.play()を呼び出してプログラムを実行すると、両端キューがポップされません。プログラムは、ユーザーがいくつのカードを入力してから、カードを引っ張るたびに乱数を生成し、カードの値を比較させるものです。乱数がカード番号よりも小さい場合、スコアは1だけインクリメントされる。しかし、それを動作させるためには、両端キューの前面をポップし、その都度、新しい両端をデッキの新しい前面と比較する必要があります。私はそれを指示するメソッドを呼び出すと、私の両端キューがポップしないのはなぜですか?

#include <iostream> 
#include <deque> 
using namespace std; 

class Player { 

    private: 


      size_t cards; 
      deque<int> mydeque; 
    public: 
      string name; 
      int score; 

      Player(string player) { 
        name = player; 
        score = 0; 

      } 

      void recieve(size_t card){ 

       mydeque.push_front (card); 
      } 
      int play() { 
        return mydeque.front(); 
        mydeque.pop_front(); 
      } 

      ~Player() { 
        name = " "; 
        score = 0; 
      } 
      void tostring(ostream & out) const{ 

        out << "player name : "<< name << endl; 
        out << "score : " << score << endl; 
        out << "cards : " << mydeque.size() << endl; 
        for(int i =0; i <mydeque.size();i++) 
          out << mydeque[i] << " " ;      
      } 

}; 

      ostream & operator <<(ostream & out, const Player & p){ 
        p.tostring(out); 
        return out;} 

int main() { 
    int rounds; 
    cout << "Give the number of rounds: "<<endl; 
    cin >> rounds; 
    Player one("some player"); 
    for (int i = 1; i < rounds+1; i++){ 
      one.recieve(i); 

    } 


    for(int i = 0; i < rounds; i++) { 
      one.play(); 
      int randnum = rand()%(rounds-1 + 1) + 1; 

      cout << one << endl; 
      cout << " The dealer draws : " << randnum << endl; 

if (randnum < one.play()){ 
        one.score = one.score + 1;}} 



    return 0; 

} 

答えて

2

文実行後、関数は終了します。

変更:

int play() { 
    return mydeque.front(); 
    mydeque.pop_front(); 
} 

へ:

int play() { 
    int x = mydeque.front(); 
    mydeque.pop_front(); 
    return x; 
} 
関連する問題