Arv*_*vin 0 c++ pointers class 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;
}
Run Code Online (Sandbox Code Playgroud)
并且btree的复制构造函数以这种方式实现:
template <typename T>
btree<T>::btree(const btree<T>& original)
{
headNode = new btree_node(original.*headNode);
}
Run Code Online (Sandbox Code Playgroud)
原始.*headNode应该返回original.headNode指向的btree_node,从而匹配btree_node的拷贝构造函数参数.
但是我收到以下错误:
错误:((B树*)此) - > B树:: headNode'不能用作部件指针,因为它是类型为"B树:: btree_node*"
我究竟做错了什么?
如果您查看优先级表,您将看到首先计算.运算符,然后计算*(取消引用)运算符。
*将指针作为参数。写了original.*headNode就没意思了。不知怎的,你告诉它来获得会员*headNode的original,但*headNode不是成员original。您还告诉它评估*headNode实际上是哪个*this->headNode(注意->首先评估)。
您想要的是首先通过original.headNodewrite获取指针,然后通过 using 取消引用它*。所以
*original.headNode
Run Code Online (Sandbox Code Playgroud)