私はArduino用のプログラムを作成しようとしていますが、Item
オブジェクトを別のHolder
オブジェクトに渡すときに何か起こっていることはわかりません。C++はコピーコンストラクタの代わりにデフォルトのコンストラクタを呼び出します
class Item {
public:
int property;
Item() {
Serial.println("parameterless constructor called");
this->property = 2;
}
Item(int property) {
this->property = property;
Serial.println("right constructor called");
}
};
class Holder {
public:
Item someitem;
Holder(Item& someitem) {
this->someitem = someitem;
}
};
void setup() {
Serial.begin(9600);
Item someitem = Item(1);
Serial.println(someitem.property);
Holder hold = Holder(someitem);
Serial.println(hold.someitem.property);
}
void loop() {
}
コンソールに出力されている:私は、私が作成していないよ(パラメータなしのコンストラクタは、最初の場所で呼び出された理由を理解していない
right constructor called
1
parameterless constructor called
1
私は簡単な例を構築してきました私の理解のための新しいオブジェクト)、そしてなぜそれが現在のオブジェクトを変更したり、新しいオブジェクトを作成したりしないのかということです。パラメータのないコンストラクタを残すことは、コンパイラによって防止されます。
"パラメーターのないコンストラクターを出すことはコンパイラーによって防止されています。"があるときは、コンパイラーによって指定されたエラーを修正する必要があります。 –
@DieterLücking彼はやったが、間違った方法:) – Roddy