2014-08-28 95 views
0

我正在填充std::vector<Box> boxes,9个对象,其中每个都有自己的字符串变量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(); 
    } 
} 

所以“box”应该在控制台中显示九次吧? GetBoxes只是返回矢量boxes,并且SetName也简单地将每个Box对象的名称设置为"box"。为什么控制台保持空白?

+0

Board :: GetBoxes()是什么样的? – juanchopanza 2014-08-28 13:32:35

+5

我打赌两个韭菜切片,'GetBoxes'返回值。 – Quentin 2014-08-28 13:33:09

+0

'std :: vector Board :: GetBoxes(){return boxes; }' – jburn7 2014-08-28 13:33:37

回答

2
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; } 

...为只读访问。

有关引用的更多信息,我将无耻地链接到another answer of mine