为什么我不能在这里使用成员初始化列表?

bqu*_*i56 0 c++

我刚刚创建了一个"Point"类,并且正在开发一个"Line"类,它有两个Point对象(Point startpoint和Point端点)作为数据成员.我在我的Line类中创建了一个构造函数,它接受两个Point对象作为参数,并且最初创建它如下:

Line(const Point& p1, const Point& p2)
{
    startpoint = p1;
    endpoint = p2;
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,但后来我决定使用成员初始化列表,而不是将成员分配给正文中的p1和p2,只是因为...但是当我将其更改为:

Line(const Point& p1, const Point& p2): startpoint(p1), endpoint(p2)
{
}
Run Code Online (Sandbox Code Playgroud)

我得到一个错误说"没有构造函数的实例"Point :: Point"匹配参数列表"并且不明白这意味着什么.

为什么成员初始化列表不在这里工作?

谢谢.

编辑:对不起,我不知道我的积分课的细节是否相关:

// Point.h

class Point
{
private:
    double x;
    double y;

public:
    Point();
    Point(Point& p);
    Point(double x1, double y1);
    ~Point();

    double X() const;
    double Y() const;

    void X(double newx);
    void Y(double newy);
    };
Run Code Online (Sandbox Code Playgroud)

// Point.cpp

#include "Point.h"

Point::Point(): x(0), y(0)
{
}

Point::Point(Point& p)
{
    x = p.x;
    y = p.y;
}

Point::Point(double x1, double y1): x(x1), y(y1)
{
}

Point::~Point()
{
}

double Point::X() const
{
    return x;
}

double Point::Y() const
{
    return y;
}

void Point::X(double newx)
{
    x = newx;
}

void Point::Y(double newy)
{
    y = newy;
}
Run Code Online (Sandbox Code Playgroud)

Use*_*ess 10

成员初始化取决于Point具有公共拷贝构造函数,因为您显式调用Point::Point(const Point&).

如果它不存在或无法访问,则无法调用它.如果你不能调用它,那不是因为初始化列表不起作用.

Point如果第一个版本有效,可能会有一个可访问的赋值运算符.


只是为了确认,现在你已经粘贴了源代码Point,复制构造函数应该如下所示:

Point::Point(const Point &other) : x(other.x), y(other.y) {}
Run Code Online (Sandbox Code Playgroud)

(您可能也习惯使用初始化列表).关键的变化是参数必须是一个const引用:这禁止在复制时意外损坏源对象.

  • 他可能声明了一个复制构造函数,但是将参数设为`Point&`而不是`const Point&` (5认同)