我有一个名为Node
的类,它有两个构造函数。当我尝试从另一个调用其中一个构造函数并将其分配给调用者指向的内存时,我不会收到任何错误。但是当我尝试使用new
分配在堆上的内存/对象到this
时,我得到一个错误表达式不可分配。以下是我的代码。可能的原因是什么?
class Node{
private:
int key;
Node* left, *right;
public:
Node(){
left=NULL;
right= NULL;
}
Node(int data){
this=new Node(); // generates error 'expression is not assignable'
*this= Node(); //compiles succesfully
this->key=data;
}
}
答案 0 :(得分:4)
C ++ 11允许delegating constructors:
Node* left, right;
关于您的代码的一些其他评论:
left
这声明Node
指针指向 - right
而Node
指向Node* left;
Node right;
(不是指针),就像你写了这样:
Node *left, *right;
这就是为什么你把星号放在变量的左边,而不是类型的右边:
Node *left;
Node *right;
或者,甚至更好:
left = NULL;
nullptr
在C ++ 11中,使用NULL
代替Node() : left(nullptr), right(nullptr) { }
。你应该使用初始化列表:
{{1}}