C ++ конференция указателя - PullRequest
       0

C ++ конференция указателя

0 голосов
/ 08 октября 2019
  //cannot bind non-const lvalue reference of type 



    class binary_tree_node
    {
      public:
        binary_tree_node(double data=0, binary_tree_node* left_link = NULL, binary_tree_node* right_link = NULL)
        {
          data_field = data;
          left = left_link;
          right = right_link;
        }
        double get_data() {return data_field;}
        binary_tree_node* get_left(){return left;}
        binary_tree_node* get_right(){return right;}
        bool is_leaf() {return (left==NULL && right==NULL);}


      private:
        double data_field;
        binary_tree_node* left;
        binary_tree_node* right;
    };

    // delete a tree
    void tree_clear(binary_tree_node* root_ptr)
    {
      if (root_ptr != NULL)  
      {
        tree_clear(root_ptr->get_left());
        tree_clear(root_ptr->get_right());
        delete root_ptr;
        root_ptr = NULL;
      }
    }


// delete a tree: the difference parameter by reference, it will not compile, //why?
// solution.cpp:589:34: error: cannot bind non-const lvalue reference of type //‘binary_tree_node*&’ to an rvalue of type ‘binary_tree_node*’
//     tree_clear(root_ptr->get_left());

void tree_clear(binary_tree_node* &root_ptr)
    {
      if (root_ptr != NULL)  
      {
        tree_clear(root_ptr->get_left());
        tree_clear(root_ptr->get_right());
        delete root_ptr;
        root_ptr = NULL;
      }
    }

Почему это не сработает, как только я поменяю функцию по ссылке. Это сообщение об ошибке выглядит следующим образом: solution.cpp: 589: 34: ошибка: невозможно привязать неконстантную ссылку lvalue типа 'binary_tree_node * &' к значению типа binary_tree_node * '. Кто-нибудь может объяснить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...