未知的类型名称Vector

时间:2014-01-09 17:18:05

标签: c++

这是point.h

#ifndef POINT_H_
#define POINT_H_
#include "/Users/Verdonckt/Documents/3dlaboNogMaarEens/3dlaboNogMaarEens/src/util/Vector.h"
class Point {

public:

    double x;
    double y;
    double z;

    Point(double x=0, double y=0, double z=0): x(x), y(y), z(z){ }

    void set(double x, double y, double z);
    friend Vector operator-(const Point& left, const Point& right);
};

#endif /* POINT_H_ */

此文件在线提供错误:

friend Vector operator-(const Point& left, const Point& right);

说出未知的类型名称:  我认为包含有效,因为如果我将它更改为非现有文件,它就不会产生错误。

这是Vector.h:

#ifndef VECTOR_H_
#define VECTOR_H_

#include "Point.h"
class Vector {

public:

double x, y, z;

Vector(double x=0, double y=0, double z=0):x(x), y(y), z(z){ }

Vector(const Point & from, const Point & to);

Vector(const Point& p):x(p.x),y(p.y), z(p.z){ }
    double getX(){return x;}
    double getY(){return y;}
    double getZ(){return z;}

    friend Vector operator*(const Vector & v, double a);

    friend Vector operator*(double a, const Vector & v);

    friend Point operator+(const Point & p, const Vector & v);

    friend Point operator+(const Vector & v, const Point & p);

    friend Vector operator+(const Vector & v1, const Vector & v2);
    friend Vector operator-(const Vector& v1, const Vector& v2);

    double dot(const Vector & v);

    Vector cross(const Vector & v);
    double length();
    void normalize();

};

#endif /* VECTOR_H_ */

再次在线上说:

friend Point operator+(const Point & p, const Vector & v);
friend Point operator+(const Vector & v, const Point & p);
Vector(const Point & from, const Point & to);
Vector(const Point& p):x(p.x),y(p.y), z(p.z){ }

未知类型名称'Point'

为什么会这样,我该如何解决?

1 个答案:

答案 0 :(得分:4)

你有一个循环依赖 - Vector.hPoint.h每个都试图包含另一个。包含警卫可以防止出现严重问题,但是你最终会得到一个在另一个之前定义的类,而第二个类的名称将不会在第一个类中出现。

幸运的是,Point不需要Vector的完整定义 - 前向声明会这样做。

class Vector;
class Point {
    // ...

    // No problem using `Vector` to declare a return type here
    friend Vector operator-(const Point& left, const Point& right);
};