【问题标题】:Tree implementation in C++: Cannot convert Node to Node*C++ 中的树实现:无法将节点转换为节点*
【发布时间】:2015-06-10 18:52:51
【问题描述】:

我的错误是关于 main 中的最后两个赋值语句。我试图通过让每个节点指向 2 个其他节点来创建一个基本树:左和右。我也尝试在创建它们时在 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;
}

【问题讨论】:

  • 你试过n1.left = &n2;
  • @ivanw 太棒了!谢谢!你能告诉我*和&之间有什么区别吗?我认为他们都将它们作为指针或引用到内存位置......
  • & 返回 while * 的地址或声明一个指针。
  • 另外,public 不用提两次。只是一些小事。
  • 好的,谢谢你们 :)

标签: c++ nodes


【解决方案1】:
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;
}

【讨论】:

    【解决方案2】:

    当您创建如下节点时:

    Node n1("this", NULL,NULL);
    

    你在堆栈上创建它们,所以n1 是一个对象。 n1.left 是一个指针,所以你也必须给它分配一个指针。为了获得指向对象的指针,您必须使用&amp;运算符,例如:

    n1.left = &n2;
    

    【讨论】:

      【解决方案3】:
      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。

      【讨论】:

      • 哦,好吧。是因为 NULL 只是指某物的值,但 nullptr 实际上意味着它没有指向任何东西吗?更新:我刚试过做 nullptr 但它说'nullptr'没有在那个范围内声明......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多