我正在尝试创建一个类Line
,它由另一个类Point
的两个对象组成:
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";
}
这是主要的:
#include <iostream>
#include <cstdio>
#include "geometryitems.cpp"
using namespace std;
int main()
{
// initialise object Point
cout << endl << "Point initialisation:" << endl;
Point pnt = Point(0.0, 0.0, 0.0);
cout << "pnt = "; pnt.display();
Point pnt2 = Point(1.0, 1.0, 1.0);
cout << "pnt2 = "; pnt2.display();
// initialising object Line
cout << "Line initialisation:" << endl;
Line line = Line(pnt, pnt2);
line.display();
return 0;
}
这些点工作正常,但该行给了我class "Point" has no members named a1, b1, c1, a2, b2, c2
的错误。
如何使用类Line
的对象创建类Point
?谢谢。
更新
我已使用复制构造函数更新了代码,但它仍在讨论私有x, y, z
。有什么想法吗?
答案 0 :(得分:2)
将复制构造函数添加到Point
类:
class Point
{
public:
Point(const Point& p)
: x(p.x), y(p.y), z(p.z)
{}
...
};
然后您可以将其用于Line
构造函数:
Line::Line(const Point& p1, const Point& p2)
: pnt1(p1), pnt2(p2)
{}
Line
类不需要单独的点变量a1
,b1
,c1
等等。当然,实际的Point
对象不需要有一个名为like的成员变量,您尝试访问它们。另请注意Point
中的成员变量是私有的,Line::display
函数无法访问它们。
答案 1 :(得分:0)
类点有成员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";
}
答案 2 :(得分:0)
你的问题有解决方案:类“Point”没有名为a1,b1,c1,a2,b2,c2的成员。
所以你的类包含x,y和z ....尝试使用x,y和z打印它
确保成员是公开的或使用getter和setter。
答案 3 :(得分:0)
您可以为私人数据成员获取快速而肮脏的解决方案。
double getX() { return x ; };
double getY() { return y ; };
double getZ() { return z ; };
我改变了Line cstor。
// constructor from 2 points
Line::Line(Point& _pnt1, Point& _pnt2)
: pnt1(_pnt1), pnt2(_pnt2)
{}
并在你的cout中改变了对这些getter的调用。
cout << "Line(Point(" << pnt1.getX() << ", " << pnt1.getY() << ", " << pnt1.getZ() << ")" << ", Point(" << pnt2.getX() << ", " << pnt2.getY() << ", " << pnt2.getZ() << ")\n";