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 ++的新手。
提前致谢。
答案 0 :(得分:1)
您需要了解pass by value vs pass by reference。 GetNodesCollection返回一个全新的向量副本。然后将节点添加到此新副本,而不是原始副本。
好吧,也许更多return by value vs return by reference。无论如何,关键是你得到一个全新的副本而不是对原始向量的引用。
修复的一种方法是将返回类型更改为引用(您必须在定义GetNodesCollection的位置进行相同的更改)
std::vector<Node>& GetNodesCollection();