C++编译报错no matching function for call to 'Vector::Vector()'求解
报错根本原因
C++ 类构造函数的规则是:当你为某个类显式定义了带参数的构造函数后,编译器不会再自动生成无参的默认构造函数。
你代码中的Vector类仅定义了接收Point类型参数的构造函数,不存在无参构造函数。而Body类中声明了三个Vector类型的成员变量pos、vel、acc,在执行Body构造函数的函数体代码之前,所有类类型的成员变量会先执行默认初始化,也就是尝试调用Vector的无参构造函数,找不到对应函数就会触发你遇到的报错。
修复方案
两种常用修复方式按需选择即可:
- 方案1:为
Vector类补充无参默认构造函数
可以直接显式声明默认构造,也可以手动实现空构造:
class Vector{ private: Point p; public: // 补充无参构造,两种写法二选一即可 Vector() = default; // 手动实现写法:Vector(){} Vector(Point _p){ set_p(_p); } // 其余方法省略 };
- 方案2:在
Body构造函数的初始化列表中显式初始化Vector类型成员,跳过默认初始化流程
你Body的构造参数已经包含了对应成员的入参,直接在初始化列表中赋值即可,同时建议将Body的构造函数设为public,否则外部无法实例化Body对象:
class Body{ private: float m; Vector pos; Vector vel; Vector acc; public: Body(float _m, Point _pos, Vector _vel, Vector _acc) : m(_m), pos(_pos), vel(_vel), acc(_acc) { // 构造函数体其余逻辑 } // 其余方法省略 };
内容的提问来源于stack exchange,提问作者niaei
相关产品推荐
相关产品推荐

