quaternion.h:15: 错误:字段“v”的类型不完整
嗨!我陷入了一个我似乎无法解决的错误。
下面是我的代码:
#ifndef QUATERNION_H
#define QUATERNION_H
#include "vec3.h"
class Vec3;
class Quaternion
{
public:
Quaternion(Vec3 v);
Quaternion(double w, Vec3 v);
Vec3 v; <--------------------------This is where the error is :(
double scalar;
Quaternion operator *(Quaternion s);
Quaternion conjugate();
};
#endif
我的 Vec.h 看起来像这样:
#ifndef VEC3_H
#define VEC3_H
#include "point.h"
#include "quaternion.h"
#include <math.h>
class Quaternion;
class Vec3
{
friend ofstream& operator <<(ofstream& output, const Vec3& p);
friend ifstream& operator >>(ifstream& input, Vec3& p);
public:
Vec3();
Vec3(double _x, double _y);
Vec3(double _x, double _y, double _z);
double x,y,z;
//Operators
Vec3 operator -(Vec3 a) const;
Vec3 operator /(double s) const;
Vec3 operator *(double s) const;
Vec3 operator *(Quaternion q) const;
// Used to do vector Vec3 addition
Vec3 operator +(Vec3 a) const;
Point operator +(Point a) const;
Vec3& operator =(Point a);
Vec3 crossProduct(Vec3 v1); // Itself cross v1
double dotProduct(Vec3 v);
double length();
void normalize();
};
#endif
再次感谢您的帮助 =)
最佳答案
好吧,您循环包含了两个头文件:vec3.h
和 quaternion.h
。包含守卫将确保每个 header 仅包含一次。其中一个将首先包括在内,另一个是第二个。在您的情况下, quaternion.h
首先包含在内,这意味着 Vec3
成为其中的不完整类型。这就是编译器告诉您的内容。
由于您试图将 Vec3
对象用作 Quaternion
对象的直接成员,因此您绝对需要 Vec3
是一个完整的类型。 quaternion.h
header 必须包含 vec3.h
header 。
class Vec3;
声明在 quaternion.h
中完全没有实现,因此您可以将其删除。
鉴于上述情况,vec3.h
不能包含 quaternion.h
,否则您将以循环包含结束,这永远不会取得任何成就。从 vec3.h
中移除 quaternion.h
。保持
class Quaternion;
vec3.h
中的声明,看看它是否这样工作。
关于c++ - 错误 : Field has an incomplete type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3999400/