c – 错误:字段类型不完整

c – 错误:字段类型不完整,第1张

概述quaternion.h:15:错误字段’v’的类型不完整 嗨!我陷入了一个似乎无法解决的错误. 以下是我的代码: #ifndef QUATERNION_H#define QUATERNION_H#include "vec3.h"class Vec3;class Quaternion{public: Quaternion(Vec3 v); Quaternion(dou 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.包含警卫将确保每个标头只包含一次.其中一个将首先包括在内,另一个 – 第二个.在您的情况下,首先包含quaternion.h,这意味着Vec3在其中变为不完整的类型.这就是编译器告诉你的.

由于您尝试将Vec3对象用作Quaternion对象的直接成员,因此绝对需要Vec3为完整类型. quaternion.h标头必须包含vec3.h标头.该

class Vec3;

声明在quaternion.h中完全没有,所以你可以删除它.

鉴于上述情况,因此vec3.h不能包含quaternion.h,或者你最终会得到循环包含,它永远不会实现任何目标.从vec3.h中删除了quaternion.h的包含.保持

class Quaternion;

在vec3.h中声明并查看它是否以这种方式工作.

总结

以上是内存溢出为你收集整理的c – 错误:字段类型不完整全部内容,希望文章能够帮你解决c – 错误:字段类型不完整所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1237269.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存