首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:对‘Point::Point()的调用没有匹配函数

错误:对‘Point::Point()的调用没有匹配函数
EN

Stack Overflow用户
提问于 2022-04-18 10:21:04
回答 1查看 88关注 0票数 0

因此,我创建了类Point,并希望使用它作为类循环中构造函数的参数,但是错误是:没有出现类"Point“的默认构造函数,而且我不知道如何修复它。守则如下所示:

代码语言:javascript
复制
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);




}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-18 10:31:50

第一个问题是,当编译器隐式调用构造函数Circle::Cirlce(Point, int)时,在执行该ctor的主体之前,数据成员centreradius默认初始化。但是,既然您已经为类提供了一个用户定义的ctor Point::Point(int, int),编译器就不会合成默认的ctor Point::Point()。因此,不能默认初始化数据成员centre

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

代码语言:javascript
复制
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的对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71910536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档