2017-04-19 39 views
0

在主我有以下代碼:爲什麼IST它調用遊戲鍵盤遊戲鍵盤的析構函數在行,如果(玩家[P] .setcoin(遊戲鍵盤,輸入))

Gameboard gameboard(8, 5); 
HumanPlayer hp1('A'), hp2('B'); 
HumanPlayer players[2]; 
players[0] = hp1; 
players[1] = hp2; 
gameboard.show(); 
//int p = player 
int input, p = 0; 
while (cin >> input) 
{ 
    switch (input) 
    { 
    case 1: 
     if (players[p].setcoin(gameboard, input)) 
     . 
     . 
     . 

在類HumanPlayer我調用函數遊戲鍵盤,並返回它

bool HumanPlayer::setcoin(Gameboard g, int row) 
{ 
    return g.setstone(name, row); 
} 

在類遊戲鍵盤我設置了硬幣(如果是全我返回false)

bool Gameboard::setstone(char player, int row) 
{ 
    for (int y = height; y >= 0; y--) 
    { 
     //row-1 da das array bei 0 beginnt 
     if (elements[y][row-1] == '.') 
     { 
      elements[y][row-1] = player; 
      return true; 
     } 
    } 
    return false; 
} 

回答

2

本功能重刑通過複印通遊戲鍵盤:

bool HumanPlayer::setcoin(Gameboard g, int row) 
{ 
    return g.setstone(name, row); 
} 

這意味着你相剋儘裏面的功能不會有效果,原來,你傳遞給它。在函數結束時,g的副本被破壞。

如果你不想做這個用途:

bool HumanPlayer::setcoin(Gameboard& g, int row) 
{ 
    return g.setstone(name, row); 
} 

的符號意味着你想傳遞一個參考,這將不會導致進行復制。

也許this question可能對您有用。

+0

thx,我忘了我只是做了它的副本:) –