使用另一个类c ++共享对象

时间:2015-04-16 22:06:47

标签: c++ object sharing

我有两个类:一个棋盘类和一个玩家类。玩家需要在玩家之间共享。我在播放器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];
    }
}

2 个答案:

答案 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