您好,我是下面代码中的编程新手,我想将 class 放入另一个,但显示错误(C++)

Hello, I am new at programming in the code below I wanted to put a class into another but an error shows(C++)

所以我创建了 class Point 并想将其用作 class Circle 中构造函数的参数,但是错误: class 没有默认构造函数“点”出现,我不知道如何解决。代码如下所示:

class Point {
private:
    int x, y;
public:
    Point(int X, int  Y) {
        x = X;
        y = Y;
    }

};


class Circle {
private:
    int radius;
    Point centre;

public:
    Circle(Point q, int r) {
        centre = q;
        radius = r;


    }


};

int main() {
    Point obj = Point(3, 4);
   Circle obj = Circle(obj, 3);




}

第一个问题是当编译器隐式调用构造函数Circle::Cirlce(Point, int)时,在执行该ctor的主体之前,数据成员centreradius 默认初始化的 。但是由于您为 class Point 提供了 user-defined ctor Point::Point(int, int),编译器将不会合成 默认构造函数Point::Point()。因此,数据成员centre不能默认初始化。

解决,您可以使用构造函数初始化列表,如下所示。如下所示的构造函数初始化列表,复制初始化数据成员centre而不是默认初始化它。

class Point {
private:
    int x, y;
public:
    Point(int X, int  Y) {
        x = X;
        y = Y;
    }

};
class Circle {
private:
    int radius;
    Point centre;

public:
//--------------------------vvvvvvvvvvvvvvvvvvvv--->constructor initializer list used here
    Circle(Point q, int r): radius(r), centre(q)
    {
     
    }
};

int main() {
    Point obj = Point(3, 4);
   Circle circleObj(obj,4);
}

Demo

此外,您在 main.

中有 2 个同名对象 obj