#c
#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. Вы слышали о const и ссылках — повышает производительность кода. Также значения по умолчанию и списки инициализации.
2. Обычно частные переменные, особенно если они доступны для всего cpp, объявляются в заголовке. Кроме того, здесь происходит так много копирования, что вам действительно следует изучить ret по ref и ret по const ref. И я не совсем уверен, к чему вы клоните, имея отдельный один родительский и много узлов на контейнер, но это не кажется слишком практичным.
3. это консольный интерфейс, в котором каждое меню состоит из ряда опций, и каждая из них может состоять из дополнительных опций и т. Д. Root выступает в качестве отправной точки. Я был бы открыт для любых предложений альтернативных структур данных.
Ответ №1:
Вы используете глобальные переменные для хранения данных экземпляра:
std::string title;
Это означает title
, что в вашей программе есть только один, и если вы когда-либо измените его, Он изменится для каждого класса, функции и т. Д., Которые обращаются к нему.
Сделайте его нестатической переменной-членом Node
, и ваша проблема исчезнет.
Комментарии:
1. Я бы принял ваш ответ сейчас, но он говорит мне подождать 12 минут, я думаю, это было легко: P