2016-10-07 65 views
0

我在下面的代碼中看到一些奇怪的行爲。我的控制檯打印向量不能正確接受新元素

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

你聽說過const和引用 - 使代碼有更好的性能。還有默認值和初始化列表。 –

+0

通常,私有變量,特別是可用於整個cpp的變量在頭中聲明。還有這麼多的複製在這裏,你真的應該看看由ref ref和ret由const ref。而且我不確定你要在每個容器中單獨放置一個父節點還是許多節點,但它看起來並不太實際。 – George

+0

它的一個控制檯界面,其中每個菜單由一系列選項組成,每個選項都可以包含其他選項等。根作爲起點。我會接受任何有關替代數據結構的建議。 – AppreciateIt

回答

3

您使用全局變量來存儲實例數據:

std::string title; 

也就是說,只有一個title在程序中,如果你改變它,它改變了每一個類,功能等訪問它。

使它成爲一個非靜態成員變量Node並且您的問題將消失。

+0

我現在接受你的回答,但它告訴我等12分鐘,我想這是一個簡單的答案:P – AppreciateIt