Rvalueをコピーコンストラクタまたは代入演算子に渡すことは、私にとっては非常に重要なことです。例えば:このなしRvaluesをコピーコンストラクタと代入演算子に渡します
int a = b+c;
または
int a;
a = b+c;
は数学の計算を行うのは難しいだろう。
私はクラスでこれを行うことができません。ここに私のコードです
#include <iostream>
using namespace std;
struct node{
public:
node(int n){
node* ptr = this;
data = 0;
for (int t=0; t<n-1; t++){
ptr -> next = new node(1);
ptr = ptr -> next;
ptr -> data = 0;
}
ptr -> next = NULL;
}
node(node &obj){
node* ptr = this;
node* optr = &obj;
while (true){
ptr -> data = optr -> data;
optr = optr -> next;
if (optr == NULL) break;
ptr -> next = new node(1);
ptr = ptr -> next;
}
}
void operator=(node &obj){
delete next;
node* ptr = this;
node* optr = &obj;
while (true){
ptr -> data = optr -> data;
optr = optr -> next;
if (optr == NULL) break;
ptr -> next = new node(1);
ptr = ptr -> next;
}
}
~node(){
if (next != NULL) delete next;
}
private:
double data;
node* next;
};
node func1(){
node a(1);
return a;
}
void func2(node a){
node b(1);
b = func1();
}
int main(){
node v(3);
func1();
func2(v);
}
私はこのコンパイルエラー与えています:
expects an l-value for 1st argument
は、どのように私はR値と同様にL値をとるコピーコンストラクタと代入演算子を書くことができますか?
ありがとうございました
移動コンストラクタと代入演算子で何が問題になりますか? – tkausl
"l値だけでなくr値も取るコピーコンストラクタと代入演算子はどのように書くことができますか?"あなたはそうしない。あなたはちょうどそれぞれを実装します。 'node(const node&obj)'と 'node(node && obj)' - assgnと同じです。コピーコンストラクタの 'const'に注意してください。 '&& obj'をコンテンツを移動させた後で破壊可能な状態にすることを忘れないでください。 –