2014-08-28 3 views
0

Я заполняю std::vector<Box> boxes с 9 Box объектами, каждая со своей строковой переменной name. Как проверка ошибок, я пытаюсь пройти через вектор объектов и распечатать переменную name каждого объекта. Однако консоль остается пустым. Вот функция, которая заполняет и выводит вектор:C++ Почему мой вектор объектов не печатает переменные объектов?

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(); 
    } 
} 

Таким образом, «окно» должно отображаться в девять раз в правой консоли? GetBoxes просто возвращает вектор boxes, а SetName также просто устанавливает для каждого Box имя объекта "box". Почему консоль остается пустым?

+0

Что делает 'Board :: GetBoxes()' похожим? – juanchopanza

+5

Я поставил два кусочка лука, которые 'GetBoxes' возвращает по значению. – Quentin

+0

'std :: vector Board :: GetBoxes() {return boxes; } ' – jburn7

ответ

2
std::vector<Box> Board::GetBoxes(){return boxes; } 

Это возвращает копию вашего boxes каждый раз, когда вы его вызываете.

std::vector<Box> &Board::GetBoxes(){return boxes; } 
//    ^Hi! 

Это возвращает ссылку на свой вектор. Затем вы можете воздействовать на него со стороны по своему усмотрению.

Это часто лучше всего дополнить константные перегрузки:

std::vector<Box> const &Board::GetBoxes() const {return boxes; } 

... для доступа только для чтения.

Дополнительную информацию о ссылках я буду бесстыдно связывать вас с another answer of mine.