项目不会添加到vector c ++

时间:2014-03-05 16:02:05

标签: c++

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

我添加了vector作为属性,我从下面的类访问该向量并添加项目。

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”。它的数量为零。添加对象不是null。

我需要一些帮助来解决这个问题。我是c ++的新手。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您需要了解pass by value vs pass by reference。 GetNodesCollection返回一个全新的向量副本。然后将节点添加到此新副本,而不是原始副本。

好吧,也许更多return by value vs return by reference。无论如何,关键是你得到一个全新的副本而不是对原始向量的引用。

修复的一种方法是将返回类型更改为引用(您必须在定义GetNodesCollection的位置进行相同的更改)

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