我有以下(截断的)类声明:
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 *'
我做错了什么?
答案 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 );