Но это здесь TicTacToeField(std::vector<std::vector<int>> field))
неверно [...]
Вы должны передать сюда вектор вектора int
s . Это означает, что TicTacToeGame
должен иметь параметр std::vector<std::vector<int>>
, который впоследствии может быть передан в конструктор родительского класса TicTacToeField
. Пример
TicTacToeGame(std::string player1, std::string player2, std::vector<std::vector<int>> field = {})
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ provided as default arguments
: TicTacToeField{ std::move(field) } // resources (preferably) can be moved, rather copy constructing them.
, player1_{ std::move(player1) } // Otherwise, pass by const reference
, player2_{ std::move(player2) }
, currentPlayer_{ 0 }
{}
Поскольку вы предоставляете аргумент родительского конструктора как аргумент по умолчанию , теперь у вас есть следующие две опции для построения TicTacToeGame
.
TicTacToeGame game{ "player1", "player2" };
// or pass std::vector<std::vector<int>>
TicTacToeGame game2{ "player1", "player2", {{1, 2, 3},{4, 5}} };
Однако, если у вас нет mField
доступного на момент создания TicTacToeGame
, вы можете либо вызвать конструктор по умолчанию TicTacToeField
(т.е. родительский класс), либо передать построенный по умолчанию std::vector<std::vector<int>>
, чтобы выбрать параметризованный конструктор TicTacToeField
.
TicTacToeGame(std::string player1, std::string player2)
: TicTacToeField{ std::vector<std::vector<int>>{} }
// or simply default constructor : TicTacToeField{}
, player1_{ std::move(player1) }
, player2_{ std::move(player2) }
, currentPlayer_{ 0 }
{}
Несколько предложений:
- Предоставление различных имен аргументам конструктора и членам класса.
- Использование Инициализатор членов перечисляет , чтобы инициализировать членов, а скорее создать класс и инициализировать членов, как вы это сделали.
class TicTacToeField
{
std::vector<std::vector<int>> mField; // class member `mField`
public:
TicTacToeField(std::vector<std::vector<int>> field) // parameter `field`
: mField{ std::move(field) } // member initializer lists
{}
};