Ваш тип Foo
является мусором, как написано.Это приводит к вашей ошибке.
Foo(int &x) {
this->x = x;
}
нет (а) абсолютно никакой причины брать x
по ссылке здесь, и (б) еще меньше причин, чтобы брать ее по не-1006 * ссылке.
Любое из следующих исправлений и Foo
, и ваша ошибка.
Foo(int const&x) {
this->x = x;
}
Foo(int const&x_in):x(x_in) {
}
Foo(int x) {
this->x = x;
}
Foo(int x_in):x(x_in) {
}
и, если значение на самом деле не int
, все же дешевое для перемещения:
Foo(int x) {
this->x = std::move(x);
}
Foo(int x_in):x(std::move(x_in)) {
}
это 6 независимых решений вашей проблемы.
Для int
я бы использовал # 4;для не- int
# 6.
Исправлять это за пределами Foo
- плохая идея, потому что вы получаете ошибку , потому что Foo
написано неправильно.Остальная часть вашего кода в порядке, не нарушайте хороший код.