C++ 使用另一个类的对象创建一个类

C++ 使用另一个类的对象创建一个类,c++,class,C++,Class,我试图创建一个类行,它由另一个类点的两个对象组成: class Point { double x, y, z; public: // constructor from 3 values Point(double x, double y, double z); // copy constructor Point(const Point &p); // method display void display(); };

我试图创建一个类
,它由另一个类
的两个对象组成:

class Point
{
    double x, y, z;

    public:
    // constructor from 3 values
    Point(double x, double y, double z);

    // copy constructor
    Point(const Point &p);

    // method display
    void display();
};

// constructor from 3 values
Point::Point(double x, double y, double z)
: x(x), y(y), z(z)
{}

// copy constructor
Point::Point(const Point &p)
: x(p.x), y(p.y), z(p.z)
{}

void Point::display()
{
    cout << "Point(" << x << ", " << y << ", " << z << ")\n";
}


class Line
{
    Point pnt1, pnt2;

    public:
    // constructor from 2 points
    Line(Point& pnt1, Point& pnt2);

    // method display line
    void display();
};

// constructor from 2 points
Line::Line(Point& pnt1_, Point& pnt2_)
: pnt1(pnt1_), pnt2(pnt2_)
{}

// method display line
void Line::display()
{
    cout << "Line(Point(" << pnt1.x << ", " << pnt1.y << ", " << pnt1.z << ")" << ", Point(" << pnt2.x << ", " << pnt2.y << ", " << pnt2.z << ")\n";
}
类点
{
双x,y,z;
公众:
//从3个值构造构造函数
点(双x,双y,双z);
//复制构造函数
点(const Point&p);
//方法显示
void display();
};
//从3个值构造构造函数
点::点(双x,双y,双z)
:x(x),y(y),z(z)
{}
//复制构造函数
点::点(常数点和p)
:x(p.x),y(p.y),z(p.z)
{}
void Point::display()
{

cout类点的成员是x,y,z,而不是a1,b1,c1。 应该是

void Line::display()
{
    cout << "Line(Point(" << pnt1.x << ", " << pnt1.y << ", " << pnt1.z << ")" << ",  Point(" << pnt2.x << ", " << pnt2.y << ", " << pnt2.z << ")\n";
}
void行::display()
{

无法将副本构造函数添加到您的
类:

class Point
{
public:
    Point(const Point& p)
        : x(p.x), y(p.y), z(p.z)
        {}

    ...
};
然后您可以将其用于
构造函数:

Line::Line(const Point& p1, const Point& p2)
    : pnt1(p1), pnt2(p2)
{}

Line
类不需要单独的点变量
a1
b1
c1
等。当然,实际的
point
对象没有您试图访问的命名为那样的成员变量。还要注意,
point
中的成员变量是私有的,您可以使用
Line::display
函数无法访问它们。

您的问题有解决方案:类“Point”没有名为a1、b1、c1、a2、b2、c2的成员

因此,您的类包含x、y和z…尝试使用x、y和z打印它


确保成员是公共的或使用getter和setter。

您可以使用getter为您的私有数据成员提供一个快速而肮脏的解决方案

   double getX() { return x ; };
   double getY() { return y ; };
   double getZ() { return z ; };
我也换了一行cstor

   // constructor from 2 points
   Line::Line(Point& _pnt1, Point& _pnt2)
   : pnt1(_pnt1), pnt2(_pnt2)
   {}
把电话转到了你的房间里

   cout << "Line(Point(" << pnt1.getX() << ", " << pnt1.getY() << ", " << pnt1.getZ() << ")" << ", Point(" << pnt2.getX() << ", " << pnt2.getY() << ", " << pnt2.getZ() << ")\n";

不能将
Point
成员声明为
public
,并使用
x
y
z
a1
b1
等。它们不是
Point
的成员。没有这样的公共成员您的
类的构造函数是个问题。更改它我不想将它们公开。是您还有其他方法吗?谢谢您的回答。我应该在哪里插入复制构造函数?它在testGI.cpp:3:0:geometryitems.cpp:116:1:error:Line::Line(const Point&,const Point&)中包含的文件中说
,它在const之前说
'与testGI.cpp:3:geometryitems.h:97:7:错误:候选项为:Line::Line(const Line&)geometryitems.h:105:5:错误:Line::Line(Point&)
@Alexandr这是因为我做了参数
const
,你必须更改声明或删除
const
。我有很多不同的错误。你能在你的答案中完全写出这两个类吗?我不知道如何在我的程序中实现你的解决方案。谢谢你的回答。成员是私人的,我不想我会检查第二件事。谢谢你的回答。我会检查的。
   cout << "Line(Point(" << pnt1.getX() << ", " << pnt1.getY() << ", " << pnt1.getZ() << ")" << ", Point(" << pnt2.getX() << ", " << pnt2.getY() << ", " << pnt2.getZ() << ")\n";