2014-08-28 2 views
0

std::vector<Box> boxes을개체로 채우고 각각은 자체 문자열 변수 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을 반환하고 SetNameBox 개체의 이름을 "box"으로 간단히 설정합니다. 콘솔이 비어있는 이유는 무엇입니까?

+0

'Board :: GetBoxes()'는 어떻게 생겼습니까? – juanchopanza

+5

'GetBoxes'가 값으로 반환하는 두 개의 부채꼴 조각에 걸 겠어요. – Quentin

+0

'std :: vector 보드 :: GetBoxes() {리턴 박스; }' – jburn7

답변

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으로 연결됩니다.

관련 문제