我遇到了一个小问题,我希望两个不同的类能够共享另一个类对象并对其进行更改。
我有一个 HumanPlayer 类、一个 ComputerPlayer 类和一个 Board 类。这两个玩家类需要能够与一个棋盘类进行交互。我以为我可以将对同一个 Board 对象的引用传递给每个类,但它似乎没有按照我想要的方式工作。这是主要内容的一部分,我将尽我所能描述正在发生的事情:
// main.cpp
Board *board2 = new Board();
board2->setBoardSize(5);
board2->initPits();
HumanPlayer firstPlayer(*board2, *menu, menu->askForFirstTurn(), true);
firstPlayer.removeFromPit(3);
board2->showBoard();
firstPlayer.removeFromPit(3);
应该只是将棋盘类中数组中的一个值设置为零。它就是这样做的。如果我要从 FirstPlayer 类的代码中显示棋盘,它会显示更改。但是当我调用 board2->showBoard()
时,就好像什么都没有改变一样。还是原来没变的板子。我真正想要发生的是让我的 firstPlayer 和 secondPlayer 类在一个共享的棋盘对象上工作。我只是不确定现在如何正确实现。
谢谢大家的帮助。如果您需要更多信息,请与我们联系。
最佳答案
听起来您正在复制棋盘对象而不是通过引用传递它。您的播放器类的构造函数应如下所示:
class Player
{
public:
Player(Board& board) // REFERENCE TO Board
: the_board_(board) // initialize the reference
{
}
protected:
Board& the_board_; // REFERENCE to Board
};
如果您在任何地方(在构造函数签名中或在类成员变量中)缺少 &
运算符,那么您将制作一份将在您的类中使用的电路板拷贝。
关于C++ 在对象之间共享变量。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7457642/