2012-01-14 30 views
4

私は、物理の処理のためのクラスをプロジェクトの一部として作成しています。私たちは、任意の振る舞いを扱うクラスを使用するように言われました。認識できない型 - 'Error:Variable "[var-name]"は型名ではありません。

私は、与えられたモジュールに基づいて内部状態を更新するクラスを作成しました。しかし、内部状態を表す構造体PhysicsDataは、それ自身のファイルを除いて認識されていません。誰か光を当てることはできますか?

(情報の巨大なダンプのため申し訳ありませんが、オブジェクト間のギャップは、問題と、それは問題が非常に大きいのです場所であることと、余分な詳細をダウントリミングにも役立ちますコンテキストを削除します)ここでは構造に問題がある:

#pragma once 

// This file "PhysicsBehaviourBase.h" 

#include <d3dx9.h> 
#include <vector> 

struct PhysicsData 
{ 
public: 
    D3DXVECTOR3 velocity; 
    D3DXVECTOR3 position; 
    D3DXVECTOR3 rotation; 
    float size; 

    PhysicsData(); 
    void add(const PhysicsData& pd); 
}; 

、このファイルの残りの部分でPhysicsDataへのすべての参照は大丈夫です。しかし、このファイルは問題を示唆し始め:void update(float time,const PhysicsData&, PhysicsData* out)ラインで

#pragma once 
// This file: "PhysicsBehaviours.h" 

#include "PhysicsBehavioursBase.h" 

class GravityConstant : public PhysicsBehaviour 
{ 
private: 
    float g; // Gravitational constant 

    // Required by the PhysicsBehaviour interface. 
    PhysicsBehaviour* copy() const {return new GravityConstant(g);} 
public: 
    GravityConstant(float accelleration_due_to_gravity = 9.81) 
     : g(accelleration_due_to_gravity) {} 

    // Required by the PhysicsBehaviour interface. 
    void update(float time,const PhysicsData&, PhysicsData* out) 
     {out->velocity.y -= g*time;} 
}; 

PhysicsDataへの両方の参照は、IntelliSenseのエラーメッセージが与えられます。

Physics PhysicsData 

Error: variable "PhysicsData" is not a type name. 

私はインテリセンスがPhysicsDataは、可変であると考える理由はわかりませんタイプPhysicsと入力します。 (Physicsは、次に宣言する型です。PhysicsDataは、物理オブジェクトを構築するためのパラメータの1つです)。

ただし、この時点でコンパイルエラーはありません。コンパイルエラーが次のファイルまでの階層で起こる:PhysicsDataへ

#pragma once 

// "Physics.h" 

#include "Timing.h" 
#include "PhysicsBehaviours.h" 
#include <d3dx9.h> // For D3DXVECTOR3 
#include <vector> 

class Physics 
{ 
private: 
    std::vector<PhysicsBehaviour*> behaviours_; 
    Timing timer; 
    PhysicsData data; 
    void addBehaviours(const BEHAVIOUR_LIST&); 
public: 
    Physics(const PhysicsData&,const BEHAVIOUR_LIST&); 
    ~Physics() {} 
    void update(); 
    PhysicsData state() const {return data;} 
    float age() const {return timer.age();} 
}; 

両方の参照は、上記と同様のIntelliSenseエラーが発生します。コンパイラエラーはこの機能を指す:

#include "Physics.h" 
// "Physics.cpp" 

Physics(const PhysicsData& initalState,const BEHAVIOUR_LIST& behaviour) // Line 4 
    : data(initialState) // Line 5 
{ // Line 6 
    addBehaviours(behaviour); 
} 

コンパイラエラー:

1> Physics.cpp 
1>[PATH]\physics.cpp(4): error C2226: syntax error : unexpected type 'PhysicsData' 
1>[PATH]\physics.cpp(5): error C2065: 'initialState' : undeclared identifier 
1>[PATH]\physics.cpp(6): error C2448: 'data' : function-style initializer appears to be a function definition 

そして複数のIntelliSenseエラー:ライン4からconst PhysicsData&&その下 :

Error: this declaration has no storage class or type specifier. 

閉じるブラケットの下オンライン4:

Error: expected a declaration. 

手がかり、修正または仮説を歓迎します。

+0

あなたはPhysics.cppにPhysics.hを含むことがありますか? –

+0

PhysicsBehaviourクラスの外観はどうですか? PhysicsBehaviourBase.hファイルには何かがありますか? – user973572

答えて

4

あなたはPhysics.cppでコンストラクタ定義からクラス指定子が欠落している:

Physics::Physics(const PhysicsData& initalState,const BEHAVIOUR_LIST& behaviour) 
^^^^^^^^^ 
+0

...明白なものを紛失したために自分自身を叩くつもりです。私はあまりにも以前のIntelliSenseのエラーで私は完全にこれを確認することができなかったエラーに遭遇した。 – Arkady

+0

他の多くの人が見解の数に基づいてそれを見逃していたようです。 – user973572

関連する問題