2017-04-19 64 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,我忘了我只是做了它的副本:) –