2014-03-05 3 views
0
class Way { 
private: 
    std::vector<Node> nodesCollection; 
public: 
    Way(); 
    Way(const Way& orig); 
    virtual ~Way(); 

    void SetNodesCollection(std::vector<Node> nodesCollection); 
    std::vector<Node> GetNodesCollection() const; 
}; 

나는 벡터를 속성으로 추가했으며 다음 클래스와 항목에서 벡터에 액세스합니다.항목은 벡터에 추가되지 않습니다.

Way wayNode; 

for (; WayIter!=wayNodes.end(); ++WayIter) 
{ 
    const JSONNode& arrayNode = *WayIter; 
    if (arrayNode.find("ref") != arrayNode.end()) 
    { 
     std::string id = arrayNode.find("ref")->as_string(); 

     if(nodesMap.find(id) != nodesMap.end()) 
     { 
      wayNode.GetNodesCollection().push_back(nodesMap.find(id)->second); 
     } 
    } 
} 

하지만 항목은 "nodesCollection"에 추가되지 않습니다. 그 수는 0입니다. 그 오브젝트 추가는 null이 아닙니다.

이 문제를 해결하려면 도움이 필요합니다. 나는 C++을 처음 사용합니다.

미리 감사드립니다.

+0

wayNodes을 것입니다 (당신은 GetNodesCollection가 정의 된 동일한 변경을해야 할 것)? 그것은 신비스럽게 코드 스 니펫에 등장했습니다 ... – 4pie0

+0

자사의 JSONNode는 "nodesMap.find (id) -> second"가 null이 아닙니다. – JanithOCoder

+0

노드 또는 노드의 일부 컨테이너? 당신이 보여주는 것과 말하는 것에 더주의를 기울이십시오. 참고 : wayNodes. 에스. – 4pie0

답변

1

pass by value vs pass by reference을 읽어야합니다. GetNodesCollection은 새로운 벡터 사본을 반환합니다. 그런 다음 노드를 원본이 아닌이 새 복사본에 추가합니다.

글쎄, 어쩌면 더 return by value vs return by reference 일 수 있습니다. 어쨌든 요점은 원래 벡터에 대한 참조 대신 새로운 복사본을 얻는 것입니다. 참조로 반환 유형을 변경하는 것입니다 해결하기 위해

한 가지 방법은

std::vector<Node>& GetNodesCollection(); 
+0

현재 GetNodesCollection이 – 4pie0

+0

을 반환하는지 확실하지 않은 경우 메서드가 첫 번째 목록에서 Way 클래스의 일부로 선언됩니까? –

+0

메서드 구현 std :: vector & Way :: GetNodesCollection() const { return nodesCollection; } 하지만 오류가 – JanithOCoder

관련 문제