Я пишу дерево выражений.Ошибка Msg: невозможно преобразовать параметр 1 из 'Node *' в 'Node'
Класс Node имеет экземпляры как элементы слева, справа и родительские.
Благодаря James McNellis в this post, я объявил их как указатели.
class Node
{
public:
char *cargo;
int depth;
Node *parent;
Node *left;
Node *right;
//constructors/destructor:
Node(void);
Node(int a_depth, Node *pparent = __nullptr);
~Node();
//method:
void traverse_tree(Node n)
};
Теперь я пытаюсь пересечь дерево и распечатать его (в файл «из»).
Рекурсивно называемый 'traverse_tree (слева);' и 'traverse_tree (справа);
вызывает сообщение об ошибке «не может преобразовать параметр 1 из« Узел »в« Узел »».
Первоначально Traverse_tree вызывается с корневым узлом в качестве аргумента.
Я думаю, что декларация параметра «(Node п)» сбивает с толку компилятор и он не знает
ли называть конструктор или нет.
Как передать «левый» и «правый» метод «traverse_tree»?
void Node::traverse_tree(Node n)
//utility to view the tree
{
if (((left) == __nullptr)||((right) == __nullptr))
{
return;
}
traverse_tree(right);
out<<' '<<n.cargo<<"\n";
traverse_tree(left);
return;
};
Шкалы упавшую с моих глаз! Конечно. Я сохраняю поведение с данными. В четвертой строке с конца я удалил n. от n.cargo, и я добавил еще один «out << << << n.cargo <<" \ n ";" перед первым возвратом, чтобы отображались листовые узлы. Он работает за исключением того, что возвращает 8224 перед каждым грузом, как это 82241,0 8224 * 82249,0 8224- 82241,0 .... Я звоню его без заданы параметры: root.traverse_tree(); Спасибо за урок! –
8224 проблема решена.Одиночные кавычки заменены на двойные кавычки в «out <<» «<< cargo <<" \ n ";" –
@Peter, проблема 8224 состоит в том, что '' '' является многобайтовой константой символа, которая превращается в целое число. Два пробела (каждый шестнадцатеричный 20 или десятичный 32) дают вам константу 32 * 256 + 32 = 8192 + 32 = 8224. – paxdiablo