错误:从“Node *”到“int”的无效转换

时间:2014-02-10 19:11:55

标签: c++

在这里使用C ++。我正在尝试开发一个特定的程序,从其前序遍历创建一个BST。这是第一批代码:

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++;
  }

然而,我在“temp = root”行上得到“错误:从'Node *'无效转换为'int'”。有任何想法吗?在我看来,我设置一个节点等于另一个节点,所以我不明白什么是错的。在网上看,没有发现任何帮助。一些类似的错误,但只是差异不足以使用。

我会提前做到这是为了学校作业所以我不是在寻找直接的答案。只是暗示我需要改变什么或我需要看哪里会很棒!感谢。

编辑:确切错误是:

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

编辑我找到了。我道歉。

我是愚蠢的,并且看起来不太难以发现我在主函数中重新定义了“temp”作为int。很抱歉浪费你的时间。

由于代表不够,无法回答我自己的问题。

1 个答案:

答案 0 :(得分: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;
}

我知道你不想直接回答,但这似乎是一个真正的错误,而不是缺乏理解。