Я заполняю std::vector<Box> boxes
с 9 объектами Box
, каждый со своим name
строковой переменной. Так же, как проверка ошибок, я пытаюсь пройти через вектор объектов и печатать каждую переменную name
объекта. Однако консоль остается пустым. Здесь функция, которая заполняет и печатает вектор:
void Engine::FillVector(){
Board board;
for(int i = 0; i < 9; i++){
Box box;
board.GetBoxes().push_back(box);
}
int size = board.GetBoxes().size();
for(int i = 0; i < size; i++){
board.GetBoxes()[i].SetName("box");
std::cout << board.GetBoxes()[i].GetName();
}
}
Итак, поле "box" должно отображаться девять раз в консоли справа? GetBoxes
просто возвращает векторные boxes
, а SetName
также просто устанавливает каждое имя объекта Box
в "box"
. Почему консоль остается пустым?
std::vector<Box> Board::GetBoxes(){return boxes; }
Это возвращает копию ваших boxes
каждый раз, когда вы ее вызываете.
std::vector<Box> &Board::GetBoxes(){return boxes; }
// ^ Hi!
Это возвращает ссылку на ваш вектор. Затем вы можете воздействовать на него со стороны по своему усмотрению.
Он часто лучше всего дополняется перегрузкой const:
std::vector<Box> const &Board::GetBoxes() const {return boxes; }
... для доступа только для чтения.
Для получения дополнительной информации о ссылках я буду бесстыдно связывать вас с другим моим ответом.
Board::GetBoxes()
?GetBoxes
возвращает по значению.