2014-02-10 6 views
-1

Работает на C++ здесь. Я пытаюсь разработать конкретную программу, которая создает BST из-за обхода порядка. Вот первая партия кода:Ошибка: неверное преобразование из 'Node *' в 'int'

class Node { 

private: 
    int val;  
    Node *left;  
    Node *right;  

public: 
    Node() : val(0), left(NULL), right(NULL) {}   
    Node (int v) : val(v), left(NULL), right(NULL) {} 
    Node (int v, Node *l, Node *r) : val(v), left(l), right(r) {} 
    Node& operator = (Node& rhs) {    
    if (&rhs == this) return *this; 
    val = rhs.val; 
    left = rhs.left; 
    right = rhs.right; 
    return *this; 
    } 

}*root; 

Я вынул некоторые из функций, но это основы. Теперь вот другой фрагмент кода:

Node *temp = new Node(); 

    if (preorder[trav] <= N) 
    { 
    temp = root; 
    root->goLeft(pre_ordered, traverse); 
    traverse++; 
    } 

    else 
    { 
    temp = root; 
    root->goRight(pre_order, traverse); 
    traverse++; 
    } 

Однако, тогда я получаю «ошибка: неправильное преобразование из„Node *“в„межд“» на линии «Темп = корень». Есть идеи? Мне кажется, что я устанавливаю один узел равным другому, поэтому я не понимаю, что случилось. Посмотрел онлайн и ничего не нашел. Некоторые подобные ошибки, но достаточно разные, чтобы не быть полезными.

Я буду откровенен, что это для школьного задания, поэтому я не ищу прямых ответов. Просто подсказки о том, что мне нужно изменить или где мне нужно выглядеть, было бы здорово! Благодарю.

EDIT: Точная ошибка:

main.cpp:160:15: error: invalid conversion from ‘Node*’ to ‘int’ [-fpermissive] 
     temp = root; 
     ^

EDIT Я нашел его. Я извиняюсь.

Я был глуп и не выглядел достаточно тяжело, чтобы обнаружить, что я переопределял «темп» как int в основной функции. Извините за то, что тратил время на ребята.

Не могу ответить на мой собственный вопрос, так как недостаточно rep.

+1

Дайте нам больше контекста вокруг вашего второго бита кода - по крайней мере, входящей функции. – Elemental

+0

[Работает для меня] (http://ideone.com/RNh8JD), как только я исправляю неправильные имена участников. Не могли бы вы разместить тестовый пример, демонстрирующий ошибку? –

+1

Ваш код не содержит 'left' и' right'. Это 'left_child' и' right_child'? Кроме того, почему вы создали новый «узел», а затем потеряете его, назначив «root»? – crashmstr

ответ

0

Имена участников, которые вы указали, не соответствуют тому, что вы использовали в коде. Например, вы объявили int value но ссылаться на него по имени val

исправленный код, который компилирует является:

class Node { 

private: 
    int val;  
    Node *left;   
    Node *right;  

public: 
    Node() : val(0), left(NULL), right(NULL) {}   
    Node (int v) : val(v), left(NULL), right(NULL) {} 
    Node (int v, Node *l, Node *r) : val(v), left(l), right(r) {} 
    Node& operator = (Node& rhs) {    
    if (&rhs == this) return *this; 
    val = rhs.val; 
    left = rhs.left; 
    right = rhs.right; 
    return *this; 
    } 

}*root; 

int main() 
{ 
    Node *temp = new Node(); 
    temp = root; 
    return 0; 
} 

Я знаю, что ты не хотел прямого ответа, но это казалось фактической ошибкой, и не отсутствие понимания.

+1

Но код в вопросе не показывает проблему, описанную ОП. –

+0

@KeithThompson Если op обновляет свой вопрос, и мой ответ уже недействителен, я обновлю его. – Avery3R

+0

Спасибо за подсказку, но да, это не проблема. Исправлен код. Спасибо в любом случае! – user3294283

Смежные вопросы