与另一个类 c++ 共享对象
Sharing the object with an another class c++
>我有两个类:棋盘类和玩家类。棋盘需要在玩家之间共享。我在播放器 cpp 文件中收到错误,说"'玩家::板':必须在构造函数库/成员初始值设定项列表中初始化"
这是我的播放器头文件:
class Player {
private:
Board &board;
string name; // I put a reference
};
在播放器 CPP 文件中:
// I pass the board in the board class by refrence but get the above error
Player::Player(string n,Board&b) {
name=n;
board=b;
}
同时,我的董事会类看起来像这样:
class Board {
private:
int** board;
int row;
int column;
};
Board::Board(int r,int c) {
row=r;
column=c;
board=new value*[r];
for(int i=0;i<r;i++) {
board[i] = new value[c];
}
}
不能延迟初始化引用。正如错误告诉您的那样,您需要在成员 init 列表中初始化它,例如:
Player::Player(string n,Board&b) : board(b) // preferably also ,name(n)
{
// rest of implementation
}
最好还应该初始化成员 init 列表中的name
,并通过const
引用传递string n
,例如 const string& n
,这样就可以避免额外的副本。如果使用 g++
,则可以使用 -Weffc++
编译器标志,该标志将为您提供有关成员列表初始化等的警告。
尽量避免将引用用作类数据成员。一些常见问题:
- 您必须在每个构造函数初始列表中初始化引用,
- 语义可能会令人困惑,
- 引用非常适合将参数传递给方法,
- 引用不允许分配
相反,尝试使用指针作为数据成员,这样可以避免问题,并且代码将更具可读性。
编辑:如果您需要在所有玩家之间共享单个板对象,那么您可以使用单例。
相关文章:
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 如何创建一个共享对象与另一个.所以在Cmake
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 在 Android Studio 中使用 C++ 共享对象时出现问题
- 共享对象、符号、C/C++ 库链接和加载
- ./main:加载共享库时出错:libopencv_highgui.so.4.0:无法打开共享对象文件:没有这样的文件或
- 在 win32 上生成 R 包:无法加载共享对象 (.dll)
- 共享对象中的符号
- sf::Windows上的音乐:api-ms-win-crt-locale-l1-1-0.dll:无法打开共享对象文件
- C++ 为什么要级联共享对象链接
- 加载共享库时出错:libbsoncxx.so._noabi:无法打开共享对象文件:没有此类文件或目录
- 从单个.cpp构建共享对象
- 与 32 位共享对象的链接问题
- 卸载共享对象(.so 文件)在 C++ 中用 dlopen() 打开
- 运行程序时找不到共享对象库,但在编译过程中链接了它
- 错误:无法打开共享对象文件:没有此类文件或目录
- Qt 创建器:将库移动到 subdir 后无法打开共享对象文件
- 共享对象中的符号名称与文件中.cpp函数不同
- C++:在共享对象中调用抽象基类构造函数/未定义的符号
- Cython:共享对象中未定义的符号