簡體   English   中英

取消引用成員指針錯誤:不能用作成員指針

[英]Dereferencing a member pointer error: cannot be used as member pointer

我有以下(截斷的)類聲明:

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的copy構造函數是通過以下方式實現的:

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 *'

我究竟做錯了什么?

嘗試這個:

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

如果查看優先級表,您將首先看到. 計算運算符,然后評估* (取消引用)運算符。

*以指針作為參數。 如果您編寫original.*headNode ,那將毫無意義。 不知怎的,你告訴它來獲得會員*headNodeoriginal ,但*headNode是不是成員original 您還告訴它評估*headNode ,它實際上是*this->headNode (請注意->首先被評估)。

您想要的是首先通過編寫original.headNode獲取指針,然后使用*取消引用。 因此

*original.headNode

我想你想要的實際上是

headNode = new btree_node( *original.headNode );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM