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

时间:2011-10-23 22:30:45

标签: c++ class pointers 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;
}

btree的拷贝构造函数以这种方式实现:

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

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

但是我收到以下错误:

  

错误:'((btree *)this) - &gt; btree :: headNode'不能用作成员指针,因为它的类型为'btree :: btree_node *'

我做错了什么?

3 个答案:

答案 0 :(得分:5)

试试这个:

headNode = new btree_node(*(original.headNode))

答案 1 :(得分:3)

如果查看precedence table,您会看到首先评估.运算符,然后评估*(取消引用)运算符。

*将指针作为参数。如果你写original.*headNode,那就毫无意义了。不知何故,你告诉它要获得*headNode的成员original,但*headNode不是original的成员。您还要告诉它评估实际为*headNode的{​​{1}}(注意首先评估*this->headNode)。

您想要的是首先通过编写->获取指针,然后使用original.headNode取消引用它。因此

*

答案 2 :(得分:2)

我认为你想要的实际上是

headNode = new btree_node( *original.headNode );