将对象作为属性c ++的类出错

Eri*_*nez 2 c++ visual-studio-2012

大家好,我在使用c ++时遇到错误.

class Position {
private:
    int posX;
    int posY;
public:
    Position(int posX, int posY) {
        this->posX = posX;
        this->posY = posY;
    }

    int getPosX() {
        return posX;
    }
    int getPosY() {
        return posY;
    }
};

class SpaceShip {
private:
    Position position;
public: 
    SpaceShip(Position position) {
         this->position = position;
    }
};

int main() {

    Position position(10, 10);
    SpaceShip spaceShip(position);
    return 0;
}    
Run Code Online (Sandbox Code Playgroud)

我得到的错误就是这个.

不存在任何默认构造函数for clase"Position"

我能做些什么来解决这个问题?
而且,为类创建对象属性的正确形式是什么?

0x4*_*2D2 6

使用member initializer-list完成数据成员和基类的构造.如果尚未使用initializer-list初始化类类型的数据成员或基类,则默认构造它.由于您的类没有默认构造函数,因此您会收到错误.

在构造函数中,this->position = position是一个赋值,而不是构造函数调用.position在你到达这一行之前是默认构造的.您需要将其替换为:

SpaceShip(Position position)
    : position(position)
{ }
Run Code Online (Sandbox Code Playgroud)

这使用成员初始化列表来调用复制构造函数Position::Position(Position const&).