C++ C4430错误-缺少类型说明符-假定为int
我正在制作一个数学库(实际上是复制一个并修改它),但在所有错误之后,只有一个错误我似乎无法摆脱。找不到类型说明符。 在我数学的201行,h是这一行:C++ C4430错误-缺少类型说明符-假定为int,c++,C++,我正在制作一个数学库(实际上是复制一个并修改它),但在所有错误之后,只有一个错误我似乎无法摆脱。找不到类型说明符。 在我数学的201行,h是这一行: int Classify(const Polygon &vcPoly); 我真的试着在谷歌上搜索,但什么也没找到。对我来说,问题不太明显。 这是Plane类的源代码。数学标题中还有向量、光线、矩阵和其他一些数学类。类多边形位于平面类之后,但我在标题顶部包含了定义 class Plane { public: V
int Classify(const Polygon &vcPoly);
我真的试着在谷歌上搜索,但什么也没找到。对我来说,问题不太明显。
这是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
希望你能帮助我。那行好像不知道多边形的类型。您是否包含了正确的头文件?我的猜测是
Polygon.h
(或类似的东西)丢失了
编辑:如果所有类都包含在同一个标题中,那么在需要将该类作为类型之前,您可能必须确保该类已定义(带有原型)。这意味着您可以将类原型放在头文件的开头:
// prototype for Polygon
class Polygon;
这是两个收割台相互包含的情况: 平面h: #包括“Polygon.h” 多边形.h #包括“平面h” 由于
#include
意味着“预处理命名文件并在此处插入内容”,这将导致无限递归,这就是为什么一种常见的技术是在头文件中使用“include guard”,形式如下:
#ifndef _SOMETHING_H_
#define _SOMETHING_H_
// header contents here
#endif
其工作原理是,如果您首先包含Polygon.h,它将定义预处理器符号,然后在标题顶部包含您所包含的文件。其中一个是Plane.h,然后它又试图包含Polygon.h,但由于定义了Polygon的保护符号,所以它会作为一个空文件包含
这可以防止无限递归,但正因为如此,在包含的平面定义之前没有多边形类型的定义
解决方案是至少在其中一个标头中(可能同时在这两个标头中)使用类型的正向定义替换标头的包含。所以在平面h中,而不是:
#include "Polygon.h"
你可以:
class Polygon;
在多边形中也可以这样做
请注意,没有定义的前向声明类型被称为不完整类型,并且在标头中如何使用它有一些限制:您可以定义指向它的指针或引用(这是示例中使用的方式,但您可能不定义实例、传递值、访问字段等。如果您希望我们提供具体建议,您应该复制准确的错误消息。尝试删除行以减少重现问题所需的最小行数,然后您将识别错误或发布si此处的简化版本,具有重新创建所需的所有功能。可能是平面和多边形相互依赖,并且多边形标头包括您的平面标头?在这种情况下,第二轮通常不会包括其中一个标头,并且类型将未定义。请尝试提出前向声明n在平面定义之前的多边形,而不是包含标题。它们确实相互依赖,这就是为什么我在标题顶部包含类Polygon;作为定义。我不包含任何其他标题,那么所有内容都在一个标题中:math.h,-----我包含/键入了类似类Polygon的元素;未包含文件或something@Christain,您需要发布整个Math.h文件。当您这样做时,应该很容易进行排序。@Christian-多边形声明的分号是否有误?多边形类也在数学标题中,就像平面类一样。多边形类仅位于平面类之后。这就是我添加like:class Polyg的原因在头的顶部,作为定义。但是我不知道什么是错误。错误C44:缺少类型指定符-int假设。注意:C++不支持默认int,之后出现错误C2143:语法错误:“缺失”,“之前”和“错误”,当然是Reldidii确实这样做了。(谢谢你们的建议!)我键入了那一行,但它似乎没有帮助。错误消息仍然存在。奇怪的是没有:类型定义未知错误或类似的错误。我找到了答案!结果是我必须在CPP文件中内联函数,并在类中内联函数,然后一切都解决了!我想这不是真的重新加载,因为一个是内联函数,另一个不是。非常感谢大家。