从c++类返回的指针的地址

Address of a pointer returned from c++ class

本文关键字:指针 地址 返回 c++      更新时间:2023-10-16

我正在用c++编写二进制搜索树程序。我有一个节点类如下:

template<typename T>
class BinaryTreeNode{
private:
T _data;
BinaryTreeNode<T>* _left;
BinaryTreeNode<T>* _right;
public:
T& data() { return _data; }
const T& data() const { return _data; }
BinaryTreeNode<T>* left() { return _left; }
const BinaryTreeNode<T>* left() const { return _left; }
BinaryTreeNode<T>* right() { return _right; }
const BinaryTreeNode<T>* right() const { return _right; }
};

在我的二进制搜索树类中,我有一个添加节点的方法,如下所示

 template<typename T>
void BinarySearchTree<T>::_push(BinaryTreeNode<T>** root ,BinaryTreeNode<T>* node){
    if(*root == NULL){
        *root = node;
    }else{
        if(node->data() < (*root)->data()){
            _push(&((*root)->left()), node);
        }else{
            _push(&((*root)->right()), node);
        }
     }
}

我在_push()中得到以下错误:

binary_tree.h:32:9: error: lvalue required as unary ‘&’ operand
_push(&((*root)->left()), node);
      ^
binary_tree.h:36:9: error: lvalue required as unary ‘&’ operand
_push(&((*root)->right()), node);
      ^

这个语法有问题吗?有人能解释一下这里出了什么问题吗?

_push(&((*root)->left()), node)

您正在尝试获取从left函数返回的临时地址。

一个很好的建议是,在将类转换为模板类之前,始终测试类的设计问题。这样模板就可以省去一些阴险的指责。