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类的定义,以防缺少分号但我找不到任何。

任何人都可以帮忙吗?

+2

材料定义在哪里? – starmole

+0

如果你在'material'后面加上'double wtf;'这样的原始元素,你会得到什么结果? – user4581301

+0

@starmole嗨!我有一个'shape.h',其中定义了三角形。 'material.h'包含在'shape.h'中。我不知道当我使用类Triangle作为前向声明时,是否包含'class Material'。但是我试图在这里包含'material.h',但仍然是同样的问题。 –

错误很可能是因为TransformHierarchyMatrix4x4未定义。

如果它们没有在"assert.h""vec3f.h"中定义,则应该是这种情况。

只有当您仅使用引用类型和/或指针类型时,前向声明才够用。因此,转发声明Triangle是可以的。但是,正向声明Triangle并不意味着您的shape.h已处理。您的material.h也不包含在shape.h中。

因此,从此代码中看不到material.h中的所有名称。 TransformHierarchyMatrix4x4不被编译器识别。 许多compliers会抱怨类似"missing type specifier - int assumed"