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 的类似问题,但似乎没有一个有用。我检查了我的 vec3fTriangle 类定义,以防缺少分号但我找不到任何分号。

任何人都可以帮忙吗?

原文由 jinglei 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 717
1 个回答

这只是微软的又一个骗局。本质上是这样的:

 class C
  {
  x y ;
  } ;

如果你将它提交给像 g++ 这样的合理编译器,它会给你一个有用的错误信息:

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

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

(3): 错误 C3646: ‘y’: 未知的覆盖说明符

(3):错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数

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

错误:“Matrix4x4”没有命名类型

原文由 TonyK 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题