//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 * '. Кто-нибудь может объяснить?