【问题标题】:Dereferencing a member pointer error: cannot be used as member pointer取消引用成员指针错误:不能用作成员指针
【发布时间】:2011-12-13 18:12:39
【问题描述】:

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

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);
}

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

但是我收到以下错误:

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

我做错了什么?

【问题讨论】:

    标签: c++ class pointers dereference


    【解决方案1】:

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

    * 将指针作为参数。如果你写original.*headNode,那就没有意义了。不知何故,您告诉它获取original 的成员*headNode,但*headNode 不是original 的成员。您还告诉它评估 *headNode 实际上是 *this-&gt;headNode(请注意首先评估 -&gt;)。

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

    *original.headNode
    

    【讨论】:

      【解决方案2】:

      试试这个:

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

      【讨论】:

        【解决方案3】:

        我假设你想要的实际上是

        headNode = new btree_node( *original.headNode );
        

        【讨论】:

        • 是的,这确实是我想要的!愚蠢的错误。谢谢!我认为如果我做了 *original.headNode 那么它将取消引用不是指针的 original ,因此没有意义
        猜你喜欢
        • 2016-08-13
        • 1970-01-01
        • 2012-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        相关资源
        最近更新 更多