Vector不能正确接受新元素

时间:2016-10-07 08:10:32

标签: c++

我在下面的代码中看到了一些奇怪的行为。我的控制台正在打印

  

0lo1lo

实际上我在期待

  

0Hel1lo

Node.cpp

std::vector<Node> Node::getChildren() {
    return children;
}

void Node::setChildren(std::vector<Node> childrenNodes) {
    children = childrenNodes;
}

void Node::addChild(Node child) {
    children.push_back(child);
    std::cout << child.getTitle();
}

std::string Node::getTitle() {
    return title;
}

来自主要功能

Node root = Node("root");
root.addChild(Node("Hel"));
root.addChild(Node("lo"));
std::cout << "\n";
std::vector<Node> children = root.getChildren();
for (int i = 0; i < children.size(); i++) {
    Node menuItem = children[i];
    std::cout << i;
    std::cout << menuItem.getTitle();
}
std::cout << "\n";

有没有人知道为什么getChildren()似乎得到的矢量没有准确列出我插入的第一个元素?

1 个答案:

答案 0 :(得分:3)

您正在使用全局变量来存储实例数据:

std::string title;

这意味着您的程序中只有一个title,如果您更改它,它会更改访问它的每个类,函数等。

将其设为Node的非静态成员变量,您的问题就会消失。