C4430错误 - 缺少类型说明符 - 假定为int

时间:2011-08-24 10:29:48

标签: c++

我正在制作一个数学库(实际上是复制一个并修改它。)但是在所有错误之后只有一个错误我似乎无法摆脱。未找到Type说明符。 它位于我的Math.h的201行,就是这一行:

     int   Classify(const Polygon &vcPoly);

我真的尝试搜索谷歌,但我没有找到任何东西。对我来说,这并不是那么明显的错误。 这是Plane类的来源。在Math头中还有vector,ray,matrix和一些更多的数学类。类Polygon位于Plane类之后,但我在头文件的顶部包含了定义。

    class Plane {
  public:
  Vector m_vcN,       // plane normal vector
            m_vcPoint;   // point on plane
  float     m_fD;        // distance to origin

  //---------------------------------------

  Plane(void) { /* nothing to do */ ; }

  inline void  Set(const Vector &vcN, const Vector &vcP);
  inline void  Set(const Vector &vcN, const Vector &vcP, float fD);
  inline void  Set(const Vector &v0,  const Vector &v1, const Vector &v2);
  inline float Distance(const Vector &vcPoint);
         int   Classify(const Polygon &vcPoly);
  inline int   Classify(const Vector &vcPoint);

  bool Clip(const Ray*, float, Ray*, Ray*);

  bool Intersects(const Vector &vc0, const Vector &vc1, 
                  const Vector &vc2);
  bool Intersects(const Plane &plane, Ray *pIntersection);
  bool Intersects(const Aabb &aabb);
  bool Intersects(const Obb &obb);

 }; // class

希望你能帮助我。

2 个答案:

答案 0 :(得分:2)

似乎在该行中不知道类型Polygon。你有没有包含正确的头文件?我的猜测是Polygon.h(或类似的东西)缺失。

编辑:如果所有类都包含在同一个标​​头中,则可能需要确保在需要作为类型之前定义类(使用原型)。这意味着您可以将类原型放在头文件的开头中:

// prototype for Polygon
class Polygon;

答案 1 :(得分:0)

这是两个包含彼此的标题:

Plane.h:     #include“Polygon.h”

Polygon.h     #include“Plane.h”

由于#include表示'预处理命名文件并在此处插入内容',这将导致无限递归,这就是为什么常见的技术是在头文件中使用'include guards',其形式为:< / p>

#ifndef _SOMETHING_H_
#define _SOMETHING_H_
// header contents here
#endif

如何工作,如果首先包含Polygon.h,它会定义预处理器符号,然后继续包含标题顶部#include的文件。其中一个是Plane.h,然后又试图包含Polygon.h,但由于Polygon的保护符号被定义,它被包含为一个空文件。

这可以防止无限递归,但由于这个原因,在包含的平面定义之前没有定义多边形类型。

解决方案至少在其中一个标题中(可能在两个标题中)用类型的正向定义替换标题的包含。所以在Plane.h而不是:

#include "Polygon.h"
你这样做:

class Polygon;

你可以在Polygon.h中做同样的事情。

请注意,没有定义的正向声明类型是所谓的不完整类型,并且在标题中如何使用它有一些限制:您可以定义指针或对它的引用(这是在示例中使用它的方式) ,但您可能无法定义实例,按值传递,访问字段等。