因此,我创建了类Point,并希望使用它作为类循环中构造函数的参数,但是错误是:没有出现类"Point“的默认构造函数,而且我不知道如何修复它。守则如下所示:
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);
}发布于 2022-04-18 10:31:50
第一个问题是,当编译器隐式调用构造函数Circle::Cirlce(Point, int)时,在执行该ctor的主体之前,数据成员centre和radius是默认初始化。但是,既然您已经为类提供了一个用户定义的ctor Point::Point(int, int),编译器就不会合成默认的ctor 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);
}此外,在obj中有两个同名为main的对象。
https://stackoverflow.com/questions/71910536
复制相似问题