Det er ikke helt simpelt, så lad mig uddybe lidt. Det der gør det lidt kompliceret er at du ikke bruger default constructor til de objekter du har i dit array.
Der er flere måder at løse problemet på.
Du kan new'e dine Players:
#include <iostream>
class Board
{
public:
int Get() { return 123; }
};
class Player
{
Player();
public:
Player(Board& _board) { std::cout << _board.Get() << std::endl; }
};
class Game
{
Board board;
public:
Player* player[2];
Game()
{
player[0] = new Player(board);
player[1] = new Player(board);
}
~Game()
{
delete player[0];
delete player[1];
}
};
int main()
{
Game game;
}
Eller du kan lave en default construktor til Player og så lave en Init funktion:
#include <iostream>
class Board
{
public:
int Get() { return 123; }
};
class Player
{
public:
void Init(Board& _board) { std::cout << _board.Get() << std::endl; }
};
class Game
{
Board board;
public:
Game()
{
player[0].Init(board);
player[1].Init(board);
}
Player player[2];
};
int main()
{
Game game;
}
Du kan også lave dit array om til en std::vector:
#include <iostream>
#include <vector>
class Board
{
public:
int Get() { return 123; }
};
class Player
{
public:
Player(Board& _board) { std::cout << _board.Get() << std::endl; }
};
class Game
{
Board board;
public:
Game() : player(2, board)
{
}
std::vector<Player> player;
};
int main()
{
Game game;
}
Bemærk at Player's constructor kun bliver kaldt én gang her, den anden player bliver et kopi af den første, det er måske ok, elles kan man:
#include <iostream>
#include <vector>
class Board
{
public:
int Get() { return 123; }
};
class Player
{
public:
Player(Board& _board) { std::cout << _board.Get() << std::endl; }
};
class Game
{
Board board;
public:
Game()
{
player.push_back(board);
player.push_back(board);
}
std::vector<Player> player;
};
int main()
{
Game game;
}
Så bliver constructoren kaldt to gange.
Der er funktionelt ikke de store forskelle på de fire måder at gøre det på, så det er mest et spørgsmål om at finde den metode du synes passer bedst i dit tilfælde.