首页 > 解决方案 > 没有匹配函数调用构造函数问题(关于类基础语法的问题)

问题描述

(我是新来使用这个平台的,如果我问错了问题,请见谅。)

我正在尝试将点的协调传递给段类,以计算段的长度,但代码块返回错误消息: 在此处输入图像描述 有人可以告诉我如何解决这个问题

#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();

}

标签: c++classsyntax-error

解决方案


当您调用构造函数时,成员会在构造函数的主体执行之前进行初始化。如果您不指定它们应该如何初始化,它们是默认构造的,但Point没有默认构造函数(= 可以不带参数调用的构造函数)。不仅要解决这个问题,而且通常您应该更喜欢初始化而不是构造函数中的赋值。您可以将Segments 构造函数更改为:

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) {}

推荐阅读