2014-03-05 68 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; 
}; 

我添加了矢量作爲屬性,我從下面的類訪問該向量並添加項目。項目未添加到向量C++

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」。其數量爲零。添加對象不爲空。

我需要一些幫助來解決這個問題。我是新來的C++。

在此先感謝。

+0

什麼wayNodes?它出現在你的代碼片段中神祕...... – 4pie0

+0

它的一個JSONNode,即「nodesMap.find(id) - > second」不爲空。 – JanithOCoder

+0

節點還是某個節點的容器?請多關注你所展示的內容以及你所說的內容。注意:wayNodes。秒。 – 4pie0

回答

1

您需要閱讀約pass by value vs pass by reference。 GetNodesCollection正在返回一個全新的矢量副本。然後,將您的節點添加到此新副本中,而不是添加到原始副本中。

那麼,也許它是更多return by value vs return by reference。無論如何,重點是你得到一個全新的副本,而不是對原始矢量的引用。修復是改變返回類型的引用

的一種方式(你必須做在那裏GetNodesCollection定義相同的變化)

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

目前還不清楚GetNodesCollection返回的是什麼 – 4pie0

+0

該方法在第一個列表中聲明爲類Way的一部分? –

+0

方法實現 std :: vector &Way :: GetNodesCollection()const { return nodesCollection; } 但它得到一個錯誤 – JanithOCoder