在这里使用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。很抱歉浪费你的时间。
由于代表不够,无法回答我自己的问题。
答案 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;
}
我知道你不想直接回答,但这似乎是一个真正的错误,而不是缺乏理解。