C++ 中的树实现:无法将 Node 转换为 Node*
Tree implementation in C++: Cannot convert Node to Node*
我的错误是关于 main 中的最后两个赋值语句。我试图通过让每个节点指向另外两个节点来创建一个基本树:左节点和右节点。我也试过在创建的时候在n1,n2,n3前面加上*号,但是还是不行...
#include <iostream>
#include <string.h>
using namespace std;
class Node{
public:
string value;
Node *left, *right;
public:
Node(string s, Node *l, Node *r){
value = s;
left = l;
right = r;
}
void display(){
cout << value << left->value << right->value;
}
};
int main(){
Node n1("this", NULL,NULL);
Node n2("is", NULL, NULL);
Node n3("next", NULL, NULL);
n1.left = n2;
n1.right = n3;
n1.display();
return 0;
}
int main(){
Node n1("this", NULL,NULL);
Node n2("is", NULL, NULL);
Node n3("next", NULL, NULL);
n1.left = &n2;
n1.right = &n3;
n1.display();
return 0;
}
当您创建如下节点时:
Node n1("this", NULL,NULL);
你在堆栈上创建它们,所以 n1
是一个对象。 n1.left
是一个指针,所以你也必须为它分配一个指针。为了获得指向对象的指针,您必须使用 &
运算符,例如:
n1.left = &n2;
Node n1("this", NULL,NULL);
Node n2("is", NULL, NULL);
Node n3("next", NULL, NULL);
n1.left = n2;
n1.right = n3;
left
和 right
是指向 Node 实例的 指针 (实际上,您将它们定义为 Node *left
、Node *right
).
所以你必须取n2和n3的地址来做赋值:
n1.left = &n2;
n1.right = &n3;
此外,请注意,在 C++11/14 中,您应该使用 nullptr
而不是 NULL
。
我的错误是关于 main 中的最后两个赋值语句。我试图通过让每个节点指向另外两个节点来创建一个基本树:左节点和右节点。我也试过在创建的时候在n1,n2,n3前面加上*号,但是还是不行...
#include <iostream>
#include <string.h>
using namespace std;
class Node{
public:
string value;
Node *left, *right;
public:
Node(string s, Node *l, Node *r){
value = s;
left = l;
right = r;
}
void display(){
cout << value << left->value << right->value;
}
};
int main(){
Node n1("this", NULL,NULL);
Node n2("is", NULL, NULL);
Node n3("next", NULL, NULL);
n1.left = n2;
n1.right = n3;
n1.display();
return 0;
}
int main(){
Node n1("this", NULL,NULL);
Node n2("is", NULL, NULL);
Node n3("next", NULL, NULL);
n1.left = &n2;
n1.right = &n3;
n1.display();
return 0;
}
当您创建如下节点时:
Node n1("this", NULL,NULL);
你在堆栈上创建它们,所以 n1
是一个对象。 n1.left
是一个指针,所以你也必须为它分配一个指针。为了获得指向对象的指针,您必须使用 &
运算符,例如:
n1.left = &n2;
Node n1("this", NULL,NULL); Node n2("is", NULL, NULL); Node n3("next", NULL, NULL); n1.left = n2; n1.right = n3;
left
和 right
是指向 Node 实例的 指针 (实际上,您将它们定义为 Node *left
、Node *right
).
所以你必须取n2和n3的地址来做赋值:
n1.left = &n2;
n1.right = &n3;
此外,请注意,在 C++11/14 中,您应该使用 nullptr
而不是 NULL
。