项目不会添加到矢量 c++ 中

Items are not adding to vector c++

本文关键字:c++ 添加 项目      更新时间:2023-10-16
 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);
        }
    }
}

但项目不会添加到"节点集合"中。 其计数为零。 该添加对象不为空。

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

提前谢谢。

您需要阅读有关按值传递与按引用传递的信息。 GetNodesCollection 正在返回矢量的全新副本。 然后,将节点添加到此新副本,而不是原始副本。

好吧,也许它更多的是按值返回而不是按引用返回。 无论如何,关键是您将获得一个全新的副本,而不是对原始矢量的引用。

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

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