«У меня есть доска считывание из файла в конструкторе, но я не знаю, как это сделать переменный размер, так что я могу читать доски любого размера»
в C++ вы используете std::vector
вместо исходного массива, как следует
class ticTacToe {
public:
ticTacToe();
void display();
bool moveIsValid();
private:
int rows;
int cols;
std::vector<std::vector<int>> board; // <<<<
};
динамическое распределение может применяться следующим образом в конструкторе:
ticTacToe(int rows_, int cols_) : rows(rows_), cols(cols_) {
board.resize(rows,std::vector<int>(cols));
}
, а затем обращаться к нему за пределами класса
Ну, я не что это действительно хорошая идея, но вы можете просто добавить функцию доступа для этой переменной-члена
std::vector<std::vector<int>>& accBoard() { return board; }
Чем лучше дизайн подход был бы IMHO, чтобы обеспечить что-то вроде отдельной функции для чтения из std::istream
:
void ticTacToe::readFromStream(std::istream& is) {
// supposed the first two numbers in the file contain rows and cols
is >> rows >> cols;
board.resize(rows,std::vector<int>(cols));
for(int r = 0; r < rows; ++r) {
for(int c = 0; c < cols; ++c) {
cin >> board[r][c];
}
}
}
Для реального кода вы бы проверить для ошибок ввода конечно, как
if(!(is >> rows >> cols)) {
// handle errors from input
}
Спасибо за помощь!Просто быстрый вопрос, хотя, когда я использую массив вне класса, я просто пишу 'ticTacToe newGame; '' newGame-> board [i] [j]; ' – gcccpp
_do Я просто пишу 'ticTacToe newGame;' _ Да, вы не используете 'new'. –
Поскольку «доска» является частной переменной, вы не можете получить к ней доступ за пределами класса ticTacToe – Quest