私はNode
というクラスを2つのコンストラクタを持っています。私が他のコンストラクタからコンストラクタの1つを呼び出して呼び出し側の指すメモリに割り当てようとすると、エラーは発生しません。しかし、ヒープ上に割り当てられたメモリ/オブジェクトをnew
に割り当てようとすると、エラーのエラーが発生するが返されます。以下は私のコードです。考えられる理由は何でしょうか?C++でこのオブジェクトにメモリを割り当てる
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;
}
}
ところで、あなたの二行目(*これは、ノード(=)を;)、コンパイラが提供するデフォルトの代入演算子(ノード::演算子を使用して、一時的なNodeオブジェクトを作成しています= (const Node&))を使用して一時ノードの状態を最初のNodeオブジェクトの状態にコピーした後、一時Nodeオブジェクトを破棄します。それはうまくいきますが、それを避けてメンバー値を直接初期化する方が良いと思います。 –
@JeremyFriesner * "C++で別のコンストラクタから1つのコンストラクタを呼び出すことはできません" * - C++ 11では可能です。 – cdhowie
@cdhowieあなたはそうです、私はそれを忘れてしまったでしょう:) –