我修改了我的项目,编译后会出现一些奇怪的错误。
#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
类定义,以防缺少分号,但我找不到任何分号。
任何人都可以帮忙吗?
答案 0 :(得分:0)
错误很可能是因为TransformHierarchy
和Matrix4x4
未定义。
如果"assert.h"
和"vec3f.h"
中未定义它们,则应该是这种情况。
仅当您仅使用引用类型和/或指针类型时,前向声明就足够了。因此,转发声明Triangle
是可以的。但转发声明Triangle
并不意味着您的shape.h
已被处理。您的material.h
也不包含在shape.h
中。
因此,此代码中无法显示material.h
中的所有名称。
编译器无法识别TransformHierarchy
和Matrix4x4
。
许多编制者会抱怨与"missing type specifier - int assumed"
答案 1 :(得分:0)
这只是Microsoft的另一个模仿对象。实质上是这样:
shrinkWrap: true,
itemCount: alo.length,
itemBuilder: (BuildContext ctxt, int Index) {
return Card(
child: Padding(
padding: const EdgeInsets.all(15.0),
child: Column(
children: <Widget>[
alo[Index]['rewards']!=null?
alo[Index]['rewards'].forEach((k, v) {
return Text(v['name']);
}):SizedBox()
],
),
));
});
如果将其提交给像g ++这样的明智编译器,它会为您提供有用的错误消息:
3:2:错误:“ x”未命名类型
另一方面,MSVC提出了以下问题:
(3):错误C3646:“ y”:未知的替代说明符
(3):错误C4430:缺少类型说明符-假定为int。注意:C ++不会 支持default-int
使用此密钥,您可以将Microsoft的错误消息解密为:
错误:“ Matrix4x4”未命名类型
答案 2 :(得分:0)
在我的情况下,发现头文件对类[即myComboBoxData]具有以下指令
#ifndef __COMBOBOXDATA__
#define __COMBOBOXDATA__
// ...
class myComboBoxData
{
// ...
}
#endif
下面的另一个类尝试使用myComboBoxData
类
class TypeDlg : public CDialog
{
myComboBoxData cbRow,cbCol;
// ...
}
错误信息如上弹出:
“错误C3646:'cbRow':未知的替代说明符”。
解决方案:
问题是OTHER标头已经使用了指令名称(__COMBOBOXDATA__
)。
因此,请确保使用其他名称,例如(__myCOMBOBOXDATA__
。