Вы определили конструктор:
x(int a, int b)
в x
.Это означает, что компилятор больше не будет определять никаких конструкторов для вас, в том числе и конструктор x()
.Таким образом, вы можете только построить x
с x(int, int)
.Вот в вашем коде:
x temp;
y(x& o) { // < No initializer list
Вы пытаетесь построить по умолчанию x
, но x
не имеет конструктора по умолчанию!Либо определите его, либо создайте x
в списке инициализатора с указанным конструктором.
Например:
y(x& o) : x(0, 0) {
Но вы создадите свой объект, тогда вы будете использовать неявноопределил copy-assignment
оператор для его назначения, что является пустой тратой времени.Вы действительно можете решить все эти проблемы, используя copy-constructor
:
class x{
...
x(const x ©) { // Define a copy constructor or just use
// the implicitly defined one.
Затем в y
, просто используйте его в списке инициализаторов y
:
x temp;
y(x& o) : temp(o) {}