取消引用成员指针错误:不能用作成员指针

Arv*_*vin 0 c++ pointers class dereference

我有以下(截断的)类声明:

template <typename T>
class btree 
{
    public:

        btree(const btree<T>& original); //This is btree's copy constructor

    private:

        struct btree_node 
        {
            btree_node(const btree_node &other)
            {
                //This is node's copy constructor
            }
        }

        btree_node* headNode;
}
Run Code Online (Sandbox Code Playgroud)

并且btree的复制构造函数以这种方式实现:

template <typename T> 
btree<T>::btree(const btree<T>& original)
{
    headNode = new btree_node(original.*headNode);
}
Run Code Online (Sandbox Code Playgroud)

原始.*headNode应该返回original.headNode指向的btree_node,从而匹配btree_node的拷贝构造函数参数.

但是我收到以下错误:

错误:((B树*)此) - > B树:: headNode'不能用作部件指针,因为它是类型为"B树:: btree_node*"

我究竟做错了什么?

Sha*_*baz 6

如果您查看优先级表,您将看到首先计算.运算符,然后计算*(取消引用)运算符。

*将指针作为参数。写了original.*headNode就没意思了。不知怎的,你告诉它来获得会员*headNodeoriginal,但*headNode不是成员original。您还告诉它评估*headNode实际上是哪个*this->headNode(注意->首先评估)。

您想要的是首先通过original.headNodewrite获取指针,然后通过 using 取消引用它*。所以

*original.headNode
Run Code Online (Sandbox Code Playgroud)


Pat*_*rik 5

试试这个:

headNode = new btree_node(*(original.headNode))
Run Code Online (Sandbox Code Playgroud)