2012-01-14 169 views
4

我正在創建一個用於處理物理作爲項目一部分的類。我們被告知使用一個處理任意行爲的類。無法識別的類型 - '錯誤:變量「[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引用的罰款。但是這個文件開始於問題的暗示:

#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;} 
}; 

void update(float time,const PhysicsData&, PhysicsData* out)PhysicsData兩個引用被賦予智能感知錯誤信息:

Physics PhysicsData 

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

我不知道爲什麼智能感知認爲PhysicsData是一個變量鍵入Physics。 (Physics是我下一個聲明的類型,而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();} 
}; 

到PhysicsData引用都得到相同的智能感知錯誤如上。編譯器錯誤指向此功能:

#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 

而更多的智能感知錯誤: 下方在const PhysicsData&&從第4行:

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

下方的閉括號在線4:

Error: expected a declaration. 

歡迎任何線索,修復或假設。

+0

您有加入Physics.h到Physics.cpp? – 2012-01-14 16:25:27

+0

PhysicsBehaviour類是什麼樣的? PhysicsBehaviourBase.h文件還有更多嗎? – user973572 2012-01-14 16:36:44

回答

4

你錯過了從構造函數定義的類說明中Physics.cpp

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

...只是想爲自己失去一個明顯的一擊而sla myself自己。我對之前的IntelliSense錯誤感到吃驚,我完全沒有檢查到這一點。 – Arkady 2012-01-14 17:18:44

+0

顯然很多其他人也錯過了它的基礎上的數量的意見。 – user973572 2012-01-14 18:42:18

相關問題