C++-错误 C3646:未知的覆盖说明符

jin*_*lei 3 c++ syntax

我修改了我的项目,编译后弹出一些奇怪的错误。

#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
Run Code Online (Sandbox Code Playgroud)

当我稍微改变声明的顺序时,错误总是发生在 之后的行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
Run Code Online (Sandbox Code Playgroud)

我在 SO 上搜索过类似的问题,但似乎没有一个有用。我检查了我的vec3fTriangle类定义,以防缺少分号,但我找不到任何分号。

任何人都可以帮忙吗?

Ton*_*nyK 9

这只是微软的另一个错误。这里的本质是:

class C
  {
  x y ;
  } ;
Run Code Online (Sandbox Code Playgroud)

如果您将其提交给像 g++ 这样的合理编译器,它会给您一条有用的错误消息:

3:2: 错误:'x' 没有命名类型

另一方面,MSVC 提出了这个胡言乱语:

(3): 错误 C3646: 'y': 未知覆盖说明符
(3): 错误 C4430: 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int

使用此密钥,您可以将 Microsoft 的错误消息解密为:

错误:“Matrix4x4”未命名类型


Liu*_*Sha 1

该错误很可能是因为TransformHierarchyMatrix4x4没有定义。

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

仅当您仅使用引用类型和/或指针类型时,前向声明就足够了。因此,转发声明Triangle就可以了。但转发声明Triangle并不意味着您的shape.h已被处理。你的 which 也没有material.h包含在shape.h.

因此,material.h在此代码中看不到 中的所有名称。 TransformHierarchy并且Matrix4x4不被编译器识别。许多编译者会用类似这样的话来抱怨"missing type specifier - int assumed"