在下一次循环迭代时重置布尔值

时间:2018-11-23 00:40:34

标签: c++ loops return-value mutators

我现在正在使用C ++,C#和Java上课,所以我觉得我有些混乱。我在设置对象布尔值时遇到了麻烦,奇怪的是我在其他对象上设置的int值保持更改。我最初是在Main内部的函数中进行设置的。离开函数并返回Main函数后,这些值是正确的。在下一次迭代中,第一个对象仍然具有新值,但是第二个对象已还原为原始值。

这是我的Main函数中的循环

    while (true) {

        Player player = playerQueue.front();

        //stores the current cell the player is on
        int cellNumber = gameBoard.findCell(player.getCellNum())->nodeNumber;       
        Cell currCell = gameBoard.getCellObject(cellNumber);

        //check cell property
        if (currCell.getCanBuy() == false){
            //pay the property owner
        } else {
            DisplayPlayerInfo(player, currCell);
        }
    }

玩家可以在这里购买电池。 Player对象的功能正确更改,但是Cell(prop)对象更改,但是在while循环迭代后恢复。

void DisplayPlayerInfo(Player &player, Cell &prop) {

    if (input == "y" || input == "Y") {
        if (player.getCurrency() >= prop.getPrice()) {

            //buy property
            prop.setCanBuy(false);
            player.subtractCurrency(prop.getPrice());
            player.addProperty(prop);
        }
    }
    else if (input == "n" || input == "N"){ 
        return;
    } else {
        //return error
    }
}

分别是我的Player对象和Cell对象的设置器

//Player setter
void Player::setPlayerName(std::string name) { pName = name; }
void Player::setQueuePos(int q) { queuePos = q; }
void Player::setCellNum(int num) { cellNum = num; }
void Player::addCurrency(int amt) { currency += amt; }
void Player::subtractCurrency(int amt) { currency -= amt; }

//Cell setter
void Cell::setCanBuy(bool val) { canBuy = val; }

编辑:将代码简化为我认为与问题相关的内容。

1 个答案:

答案 0 :(得分:0)

Cell currCell = `gameBoard.getCellObject(cellNumber);`

这将创建一个新对象,该对象位于while循环本地。原始对象的副本。

void DisplayPlayerInfo(Player &player, Cell &prop) {

这是通过引用将该新对象传递给函数,这就是为什么它在离开函数后仍保留更改后的值的原因。但是,这些新的更改后的值未存储在原始对象中,因此当循环结束时,本地对象将与这些更改后的值一起销毁。更改gameBoard.getCellObject(cellNumber);以返回引用而不是原始对象的副本以解决此问题。 Cell &getCellObject(int i);