在对象之间共享变量
C++ Sharing variable between objects.
我有一个小问题,我希望两个不同的类能够共享和更改另一个类对象。
我有一个HumanPlayer类,一个ComputerPlayer类和一个Board类。两个玩家类需要能够与一个Board类进行交互。我认为我可以将同一个Board对象的引用传递给每个类,但它似乎并没有按照我想要的方式工作。下面是main中的部分内容,我会尽可能描述一下发生了什么:
//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);
应该只是将board类中的数组中的值设置为零。它确实做到了。如果我要从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
};
如果您在任何地方(在构造函数签名或在类成员变量上)缺少&
操作符,那么您将制作将在您的类中使用的板的副本。
HumanPlayer firstPlayer(*board2, *menu, menu->askForFirstTurn(), true);
通过一个值传递第一个参数。删除*
并将其添加到firstPlayer
函数的声明中
您可能没有自始至终使用引用。有两件事需要检查:
-
HumanPlayer的构造函数必须以board作为参考(Board&)。检查那块木板。参数的类型。否则,当您调用构造函数时,您将隐式地复制Board,以便构造函数可以按值获取Board。
-
HumanPlayer的成员变量类型必须为board &也否则,当您设置成员变量时,您将隐式地复制来自原始Board对象的数据。请记住,当使用引用作为成员变量时,您需要使用构造函数初始化列表而不是赋值。
我最好的猜测是您的HumanPlayer
的构造函数的声明看起来像:
HumanPlayer( Board board, Menu menu, int askForTurn, int otherBoolean );
所以当你用
调用时HumanPlayer firstPlayer(*board2, *menu, menu->askForFirstTurn(), true);
您实际上使用board2
的副本来初始化firstPlayer
,而不是引用它。
HumanPlayer
的构造函数被声明为接收一个引用到board(可能还有menu?)。它看起来像:
HumanPlayer( Board& board, Menu& menu, int askForTurn, int otherBoolean );
- C++子类共享变量?
- 子目录之间的 CMAKE 共享变量
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较
- 如何在不同的CMakeList.txt之间共享变量?
- C++ 编译时在两个变量之间交替
- 有没有办法在两个共享对象之间使用相同的全局变量?
- 在派生类之间复制共享变量(浅副本就足够了)
- 在不同类的对象之间共享变量 (C++)
- 在类实例之间共享变量
- 在C++中的多个DLL之间共享变量
- 需要有关在类之间共享变量的 OOP 设计的帮助,这些变量单独使用计时器运行
- 如何在C和C++代码之间共享变量
- 在c/c++中,在源文件之间共享变量的最佳策略是什么
- 在线程之间共享变量的方法
- 两个共享对象之间的共享变量
- 在对象之间共享变量
- 对 WinAPI 线程之间的共享变量使用易失性
- 在两个 lambda 之间共享变量
- 在C和C++库之间共享变量的困境
- CUDA和不同全局函数之间的共享变量