我有两个类:一个棋盘类和一个玩家类。玩家需要在玩家之间共享。我在播放器cpp文件中得到错误,说" '球员::板' :必须在构造函数base / member初始化列表"
中初始化这是我的播放器标题文件:
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];
}
}
答案 0 :(得分:3)
您无法推迟初始化参考。正如错误告诉您的那样,您需要在成员初始化列表中初始化它,例如:
Player::Player(string n,Board&b) : board(b) // preferably also ,name(n)
{
// rest of implementation
}
最好,您还应该在成员初始化列表中初始化name
,然后通过string n
const
引用,例如const string& n
,以避免额外的副本。如果您使用g++
,则可以使用-Weffc++
编译器标志,该标志将为您提供有关成员列表初始化等的警告。
答案 1 :(得分:1)
尽量避免将引用用作类数据成员。一些常见问题:
而是尝试使用指针作为数据成员,这将避免问题,并且您的代码将更具可读性。
编辑:如果您需要在所有玩家之间共享一个Board对象,那么您可以使用Singleton。