[英]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
,那將毫無意義。 不知怎的,你告訴它來獲得會員*headNode
的original
,但*headNode
是不是成員original
。 您還告訴它評估*headNode
,它實際上是*this->headNode
(請注意->
首先被評估)。
您想要的是首先通過編寫original.headNode
獲取指針,然后使用*
取消引用。 因此
*original.headNode
我想你想要的實際上是
headNode = new btree_node( *original.headNode );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.