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;

leftright 是指向 Node 实例的 指针 (实际上,您将它们定义为 Node *leftNode *right ).

所以你必须取n2和n3的地址来做赋值:

n1.left = &n2;
n1.right = &n3;

此外,请注意,在 C++11/14 中,您应该使用 nullptr 而不是 NULL