2017-05-09 8 views
1

を取得します。coordsの(x、y)を持つエンド白い石でキューにある理由C++のstd ::キューのプッシュポップ2つの異なるオブジェクトは、私がプログラムに従ってている第一の目的

int main(){ 
    std::queue<Stone> Q; 
    Stone s1=Stone(8,8); 
    s1.setStoneColor(Color::WHITE); 
    Q.push(s1); 
    Stone curr = Q.back(); 
    Q.pop(); 

    Stone s2=Stone(7,7); 
    s2.setStoneColor(Color::BLACK); 
    Q.push(s2);     //here Q contains x=8,y=8,colour=WHITE...why?? 
    Stone curr2 = Q.back(); 
    Q.pop(); 

    return 0 ; 
} 

を=(8,8 )?

私は、オブジェクトが値によってキューにコピーされると考えました。したがって、参照/ポインタはありません。

何とか私は指定されたデストラクタをやっていないと思ったのですか?

スマートポインタを使用してどうにかして是正できますか?

これらの奇妙なエラーが... 感謝を不可解されているので、私は、Javaの背景から来ます。

私はClion IDEを使用しています。 EDIT

私はXcodeで同じことを試してみましたが、第二の石を押した後、私はそれがClion/cmakeの/デバッガの事、およそ知力誰であると信じて7,7、黒...

が期待されていましたこれら?私が使用している

クラスは以下のとおりです。

enum Color{ 
    BLACK=0, 
    WHITE=1, 
    BLANK=2 
}; 

、あなたは)最初Q.popを(実行すると、Qは、少なくとも空であることを期待will'd

class Stone { 
int x = 0; 
int y = 0; 
bool discovered = false; 
Color stoneColor; 

public: 

Stone(int _x, int _y) { 
    this->x = _x; 
    this->y = _y; 
    this->stoneColor = Color::BLANK; 
} 


void setDiscovered(bool value){ 
    discovered=value; 
} 
bool getDiscovered(){ 
    return discovered; 
} 

//setter 
void setStoneColor(Color _stoneColor) { 
    stoneColor = _stoneColor; 
} 

//getter 
Color getStoneColor()const { 
    return stoneColor; 
} 

int getPositionX() const { 
    return x; 
} 
int getPositionY() const{ 
    return y; 
} 
bool operator==(const Stone &other) const { 
    if(this->x==other.getPositionX()&&this->x==other.getPositionY()&& this->stoneColor==other.getStoneColor()){ 
     return true; 
    } 
    else{ 
     return false; 
    } 

    } 
}; 
+0

"Qはx = 8、y = 8、color = WHITE ...なぜ??" clionを使うか、キュー上で関数を呼び出すか、 'Q'をどうやって調べていますか? – George

+0

clionデバッガを使用し、コードをステップ実行します。 Xcodeデバッガを使用すると正しい答えが得られます。 – TomBombadil

+0

私はclionにあまり慣れていません:cしかし、正しい 'queue <> :: push'は、渡されたオブジェクトのコピーを作成します。私が提案できる唯一のことは、最初のポップコールの後にキューのサイズの値を表示または見ることです。これは、どこから問題が発生しているかを大まかに知ることができます。デバッガは、リリース構成であれば間違ったものになる可能性があるので、問題になる可能性があります。とにかく、私は散歩している、ちょうど0の場合は、サイズをチェックし、問題は一方的にまたは別の_probably_デバッガで:-) – George

答えて

-1

クラス次のpush()の前に。どうやって白い石があるのか​​分かりません。しかし、オブジェクトが価値によってコピーされたと思った理由や、代わりに参照によってコピーされていると感じたかもしれません。この場合、それらは値によってコピーされ、Q.popではコピーされません。主な機能の中のローカルスコープであり、破壊されていない限り少なくともこのスコープ内で持続しなければならない。

関連する問題