Проблемы с передачей объектов в древовидной структуре
Я новичок в C++ и arduino. Хочу построить объект Tree, но он ведет себя не так, как я ожидал. Вот код:
TreeNode.h
class TreeNode {
public:
TreeNode(String inputNodeName);
TreeNode *children[];
TreeNode &getChild(int index);
int getLength();
String nodeName;
void addChild(TreeNode &node);
String getName();
private:
int childLength;
};
Узел дерева.cpp
TreeNode::TreeNode(String inputNodeName) {
nodeName = inputNodeName;
childLength = 0;
}
TreeNode &TreeNode::getChild(int index) {
return *children[index];
}
int TreeNode::getLength() {
return childLength;
}
String TreeNode::getName(){
return nodeName.c_str();
}
void TreeNode::addChild(TreeNode &node) {
children[childLength] = &node;
childLength++;
}
Я инициализирую его в функции настройки:
void setup() {
Serial.begin(9600);
TreeNode mainTree("main");
TreeNode firstChild("first child");
TreeNode secondChild("second child");
TreeNode subChild("subschild");
Serial.println(mainTree.getName()); //выводит "main"
Serial.println(firstChild.getName()); //выводит "первый потомок";
Serial.println(secondChild.getName()); //выводит второго потомка";
mainTree.addChild(firstChild);
mainTree.addChild(secondChild);
Serial.println(mainTree.getName()); // печатает пустую строку
Serial.println(secondChild.getName()); //выводит второй дочерний элемент"
secondChild.addChild(subChild);
Serial.println(secondChild.getName()); //выводит пустую строку
}
Итак, моя проблема в том, что когда я добавляю дочерний элемент к узлу, имя узла пустое или отображаются странные символы. Я думаю, что я неправильно понял передачу объекта по ссылке. Может кто-нибудь объяснить, что я сделал не так?
@jan, 👍1
1 ответ
Лучший ответ:
▲ 1
TreeNode *children[];
Это объявляет массив указателей, однако также требует, чтобы вы назначили ему память. Я никогда не видел, чтобы вы выделяли эту память.
Если вы ожидаете небольшое количество потомков, то вы можете использовать эту верхнюю границу в качестве статического распределения:
#define MAX_CHILDREN 10
//...
TreeNode *children[MAX_CHILDREN];
В противном случае используйте вектор:
std::vector<TreeNode *> children;
,
@ratchet freak
Смотрите также:
- Как использовать SPI на Arduino?
- Библиотека DHT.h не импортируется
- Светодиоды: разница между общим анодом и общим катодом
- Как повторить кусок кода
- Почему эта программа на C++ не может прочитать Serial.write() моего arduino?
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
- Отображение двоичных данных на светодиодах
- Корпус кнопки и переключателя