Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么在C+中封装时会出现这种错误+;?_C++ - Fatal编程技术网

C++ 为什么在C+中封装时会出现这种错误+;?

C++ 为什么在C+中封装时会出现这种错误+;?,c++,C++,这是我的Line2D.h class Line2D { private: Point2D pt1; Point2D pt2; protected: double length; // Set function void setLength(); public: // Constructor Line2D(); Line2D(Point2D pt1, Point2D pt2); // Get functions Poi

这是我的Line2D.h

class Line2D
{
private:
    Point2D pt1;
    Point2D pt2;
protected:
    double length;
    // Set function
    void setLength();
public:
    // Constructor
    Line2D();
    Line2D(Point2D pt1, Point2D pt2);
    // Get functions
    Point2D getPt1();
    Point2D getPt2();
    double getScalarValue();
    // Set functions
    void setPt1(Point2D pt1);
    void setPt2(Point2D pt2);
    // Other functions
    void printLine2D();
    bool operator==(const Line2D& otherL2D) const;
};
这是我的观点

class Point2D
{
// friend bool operator==(const Point2D& otherP2D) const;
 protected:
// private:
// public:
    int x;
    int y;
    double distFrOrigin;
    // This function computes the distance of
    // the point to the origin (0,0) and initializes 
    // disFrOrigin with the distance value.
    void setDistFrOrigin();
 public:
    // Constructor
    Point2D();
    Point2D(int x, int y);
    // Get functions
    int getX();
    int getY();
    // Set functions
    void setX(int);
    void setY(int);
    // Accessor method(returns the value of distFrOrigin
    double getScalarValue();
    void printPoint2D();
    bool operator==(const Point2D& otherP2D) const;
 };
这是我的Line2D.cpp

Line2D::Line2D()
{
pt1 = Point2D();
pt2 = Point2D();
length = 0.0;
}
Line2D::Line2D(Point2D pt1, Point2D pt2):Point2D(x,y)
{
/*
// Trial 1
pt1.x = Point2D.getX();
pt1.y = Point2D.getY();
pt2.x = Point2D.getX();
pt2.y = Point2D.getY();
*/ 
// pt1.Point2D(x,y);
// pt2.Point2D(x,y);
// Setting for both points
// this -> pt1 = pt1;
// this -> pt2 = pt2;
// setLength();
}
Line2D::setLength()
{
// int xL = pow((pt1.x - pt2.x),2);
// int yL = pow((pt1.y - pt2.y),2);
int xL = pow((pt1.getX() - pt2.getX()),2);
int yL = pow((pt1.getY() - pt2.getY()),2);
length = sqrt(xL + yL);
this -> length = length;
}
Line2D::getScalarValue()
{
return length;
}
Line2D::getPt1()
{
return pt1;
}
Line2D::getPt2()
{
return pt2;
}
Line2D::setPt1(Point2D pt1)
{
// Setting for first point only
this -> pt1 = pt1;
}
Line2D::setPt1(Point2D pt2)
{
// Setting for second point only
this -> pt2 = pt2;
}
void Line2D::printLine2D()
{
cout << "  " << pt1  << "  " << pt2 << "  " << length << endl;
}
bool Line2D::operator==(const Line2D& otherL2D) const 
{
return(pt1 == otherL2D.pt1 &&
        pt1 == otherL2D.pt2);
}
`

Point2D::Point2D(int x,int y)
{
这个->x=x;
这->y=y;
}
void Point2D::setX(int x)
{
这个->x=x;
}
void Point2D::setY(int y)
{
这->y=y;
}
int Point2D::getX()
{
返回x;
}
int Point2D::getY()
{
返回y;
}
void Point2D::setDistFrOrigin()
{
distFrOrigin=sqrt(pow(x,2)+pow(y,2));
}
void Point2D::printPoint2D()
{

cout1.你所说的直接基是什么意思?如果你想让它们共享相同的函数等,你需要使用抽象类,除此之外,我不确定我是否理解你问题的这一部分

2.您需要在函数定义前面指定“void”关键字。除此之外,您的setLength()函数在头文件中声明为“protected”。我不知道您是否有保护“set”函数的特定原因,但通常是“set”函数被声明为公共函数

3。我在头文件中看不到任何其他“setLength()”函数声明,这些声明将在以后重载。您需要声明所有函数,即使是您需要重载的函数。对于编译来说,了解它具有哪些函数是很重要的

4.你需要更具体一些。我想这就是你说的那句话:

int xL = pow((pt1.getX() - pt2.getX()),2);

xL = (pt1's X - pt2's X) * (pt1's X - pt2's X)

希望这对您有所帮助。

1.您所说的直接基是什么意思?如果您希望它们共享相同的函数等。您需要使用抽象类,除此之外,我不确定我是否理解您问题的这一部分

2.您需要在函数定义前面指定“void”关键字。除此之外,您的setLength()函数在头文件中声明为“protected”。我不知道您是否有保护“set”函数的特定原因,但通常是“set”函数被声明为公共函数

3。我在头文件中看不到任何其他“setLength()”函数声明,这些声明将在以后重载。您需要声明所有函数,即使是您需要重载的函数。对于编译来说,了解它具有哪些函数是很重要的

4.你需要更具体一些。我想这就是你说的那句话:

int xL = pow((pt1.getX() - pt2.getX()),2);

xL = (pt1's X - pt2's X) * (pt1's X - pt2's X)

希望这对您有所帮助。

您必须在每个函数声明中指定返回类型,包括定义。因此,没有
Line2D::setLength(…){…}
但是
void Line2D::setLength(…){…}
Pow问题:无法再现其中的大部分。有太多其他错误阻碍了程序的运行。#4几乎可以肯定是这一问题的结果。有许多设计错误,一旦程序运行,就要立即开始。#1
Line2D::Line2D(Point2D pt1,Point2D pt2):Point2D(x,y)
编译器看到
Point2D(x,y)
as,因为没有名为
Point2D
的成员要初始化,所以尝试初始化基类。
Line2D
没有基类。
Line2D
这段代码试图做什么?必须在每个函数声明中指定返回类型,包括定义。因此,没有
Line2D::setLength(…){…}
但是
void Line2D::setLength(…){…}
Pow问题:无法再现其中的大部分。太多其他错误阻碍了它的发展。#4几乎可以肯定是由它造成的。有许多设计错误,一旦你让程序运行,就要立即开始。#1
Line2D::Line2D(Point2D pt1,Point2D pt2):Point2D(x,y)
编译器将
Point2D(x,y)
视为试图初始化基类,因为没有名为
Point2D
的成员进行初始化。没有用于
Line2D
的基类。您打算用这段代码做什么?
int xL = pow((pt1.getX() - pt2.getX()),2);

xL = (pt1's X - pt2's X) * (pt1's X - pt2's X)