这是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'
为什么会这样,我该如何解决?
答案 0 :(得分:4)
你有一个循环依赖 - Vector.h
和Point.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);
};