C++ - 错误C3646:未知覆盖说明符
问题描述:
我修改了我的项目,编译后弹出一些奇怪的错误。C++ - 错误C3646:未知覆盖说明符
#ifndef BART_RAY_TRACER_MESH_H
#define BART_RAY_TRACER_MESH_H
#include <vector>
#include "assert.h"
#include "vec3f.h"
class Triangle;
class Mesh {
public:
uint32_t nverts;
bool _is_static;
vec3f *verts;
vec3f *_verts_world;
Material material;
// 2 error occurs at the line below
Matrix4x4 _trans_local_to_world; // '_trans_local_to_world': unknown override specifier & missing type specifier - int assumed. Note: C++ does not support default-int
Matrix4x4 _trans_local_to_world_inv;
TransformHierarchy *_trans_hierarchy;
std::vector<Triangle* > triangles;
// ...
};
#endif
当我改变声明的顺序一点点,错误总是发生Material material
后线,但与不同的消息:
#ifndef BART_RAY_TRACER_MESH_H
#define BART_RAY_TRACER_MESH_H
#include <vector>
#include "assert.h"
#include "vec3f.h"
class Triangle;
class Mesh {
public:
uint32_t nverts;
bool _is_static;
vec3f *verts;
vec3f *_verts_world;
Material material;
// 2 error occurs at the line below
TransformHierarchy *_trans_hierarchy; // error C2143: syntax error: missing ';' before '*' & error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Matrix4x4 _trans_local_to_world;
Matrix4x4 _trans_local_to_world_inv;
std::vector<Triangle* > triangles;
// ...
};
#endif
我搜索过的SO,但类似的问题没有看起来有用。 我检查了我的vec3f
,Triangle
类的定义,以防缺少分号但我找不到任何。
任何人都可以帮忙吗?
答
错误很可能是因为TransformHierarchy
和Matrix4x4
未定义。
如果它们没有在"assert.h"
和"vec3f.h"
中定义,则应该是这种情况。
只有当您仅使用引用类型和/或指针类型时,前向声明才够用。因此,转发声明Triangle
是可以的。但是,正向声明Triangle
并不意味着您的shape.h
已处理。您的material.h
也不包含在shape.h
中。
因此,从此代码中看不到material.h
中的所有名称。 TransformHierarchy
和Matrix4x4
不被编译器识别。 许多compliers会抱怨类似"missing type specifier - int assumed"
材料定义在哪里? – starmole
如果你在'material'后面加上'double wtf;'这样的原始元素,你会得到什么结果? – user4581301
@starmole嗨!我有一个'shape.h',其中定义了三角形。 'material.h'包含在'shape.h'中。我不知道当我使用类Triangle作为前向声明时,是否包含'class Material'。但是我试图在这里包含'material.h',但仍然是同样的问题。 –