2017-09-13 901 views
0

私のプロジェクトを修正しました。コンパイルした後に奇妙なエラーが表示されます。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クラス定義をチェックしましたが、何も見つかりません。

いずれかを助けてもらえますか?

+2

マテリアルはどこに定義されていますか? – starmole

+0

'material 'の後に' double wtf; 'のようなプリミティブを置くとどんなことが起こるのですか? – user4581301

+0

@starmoleこんにちは!私は '三角形 'が定義されている' shape.h'を持っています。 'material.h'は' shape.h'に含まれています。前方宣言として 'class Triangle'を使うとき、' class Material'が含まれるかどうか分かりません。しかし、ここでも 'material.h 'をインクルードしようとしましたが、それと同じ問題です。 –

答えて

0

TransformHierarchyMatrix4x4が定義されていない可能性が最も高いです。

"assert.h""vec3f.h"で定義されていない場合は、これが該当します。

フォワード宣言は、参照型および/またはポインタ型のみを使用する場合にのみ十分です。したがって、Triangleを宣言するにはOKです。しかし、Triangleと宣言しても、shape.hが処理されるわけではありません。 shape.hに含まれているmaterial.hも含まれていません。

したがって、material.hのすべての名前はこのコードからは見えません。 TransformHierarchyおよびMatrix4x4は、コンパイラによって認識されません。 多くのコンパイラーが同様の言葉で文句を言うでしょう