c++ - 没有匹配函数调用构造函数问题(关于类基础语法的问题)
问题描述
(我是新来使用这个平台的,如果我问错了问题,请见谅。)
我正在尝试将点的协调传递给段类,以计算段的长度,但代码块返回错误消息: 有人可以告诉我如何解决这个问题
#include <iostream>
#include <cmath>
using namespace std;
class Point
{
public:
Point(float in1, float in2):x(in1),y(in2){};
float x, y;
};
class Segment
{
public:
Segment(Point in1, Point in2){
this->a.x = in1.x;
this->a.y = in1.y;
this->b.x = in2.x;
this->b.y = in2.y;
};
float length() //return the length of segment
{
float delta_x = a.x - b.x, delta_y = a.y - b.y;
return sqrt( delta_x * delta_x + delta_y * delta_y);
};
private:
Point a, b;
};
int main(){
Point a(12,5),b(6,6);
Segment seg1(a, b);
cout << seg1.length();
}
解决方案
当您调用构造函数时,成员会在构造函数的主体执行之前进行初始化。如果您不指定它们应该如何初始化,它们是默认构造的,但Point
没有默认构造函数(= 可以不带参数调用的构造函数)。不仅要解决这个问题,而且通常您应该更喜欢初始化而不是构造函数中的赋值。您可以将Segment
s 构造函数更改为:
Segment(Point in1, Point in2) : a(in1.x,in1.y), b(in2.x, in2.y) {}
这是使用构造函数的初始化列表并注意主体是空的。
但是,我建议您使用隐式声明的复制构造函数for Point
(以 aPoint
作为参数的构造函数)并像这样编写Segment
构造函数:
Segment(Point in1, Point in2) : a(in1), b(in2) {}
推荐阅读
- hive - Hive LLAP 低 Vcore 分配
- sql-server - 获取最近执行的 DML 命令列表
- jquery - 如何为我的 CSS 网格使用网格加载动画脚本 (GridLoaderFx)
- c# - 将 kepypress 事件添加到基本计算器表单
- python - 从文件读取时出现 UnicodeDecodeError
- django - 显示并序列化 select_related() 模型方法的结果
- laravel - Laravel 将多个输入字段保存到数据库的更简单方法
- amazon-s3 - 如何加载新的 CSS 强制页面重新缓存
- postgresql - 在 Heroku 上升级 postgres 版本,为什么要升级追随者?
- android - android.widget.TextView 变为空?