运营商+(矢量)的点 - 但矢量使用点,并在申报点未申报(Operator +(Vector) fo

2019-09-18 23:52发布

我的代码:

class Point3D{
    protected:
        float x;
        float y;
        float z;
    public:
        Point3D(){x=0; y=0; z=0;}
        Point3D(const Point3D & point){x = point.x; y = point.y; z = point.z;} 
        Point3D(float _x,float _y,float _z){x = _x; y = _y; z = _z;}
}

class Vector3D{
    protected:
        Point3D start;
        Point3D end;

    public:
       ...

        Point3D getSizes(){
            return Point3D(end-start);
        }
}

我想创建和三维点操作+,将采取一个向量:

Point3D & operator+(const Vector3D &vector){
    Point3D temp;
    temp.x = x + vector.getSizes().x;
    temp.y = y + vector.getSizes().y;
    temp.z = z + vector.getSizes().z;
    return temp;
}

但是,当我把该操作iside三维点类的声明,我有错误,因为我没有做的Vector3D声明在这里。 我不能三维点之前移动的Vector3D声明,因为它使用三维点。

Answer 1:

您可以通过定义移动后的函数定义解决这个问题Vector3D ,只是声明在类定义的功能。 这需要声明Vector3D ,但没有完整的定义。

另外,不要退回给当地的自动变量的引用。

// class declaration
class Vector3D;

// class declaration and definition
class Point3D { 
    // ...

    // function declaration (only needs class declarations)
    Point3D operator+(const Vector3D &) const;
};

// class definition
class Vector3D {
    // ...
};

// function definition (needs class definitions)
inline Point3D Point3D::operator+(const Vector3D &vector) const {
    // ...
}


Answer 2:

把它放在外面类:

Point3D operator+(const Point3D &p, const Vector3D &v)
{

}

而且永远不返回a reference to local variable



文章来源: Operator +(Vector) for Point - but the Vector uses Point and it's undeclared in Point declaration