2

私はコードを持っています:

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+ を作成したい:

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;
}

しかし、その操作を Point3D クラス宣言の横に置くと、ここで Vector3D が宣言されていないため、エラーが発生しました。また、Point3D を使用しているため、Point3D の前に Vector3D 宣言を移動することはできません。

4

2 に答える 2

5

クラスの外に置く:

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

}

そして二度と戻ってこないa reference to local variable

于 2012-07-02T12:47:19.847 に答える
3

これを解決するには、関数定義をの定義の後に移動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 {
    // ...
}
于 2012-07-02T13:07:02.680 に答える