我正在創建一個用於處理物理作爲項目一部分的類。我們被告知使用一個處理任意行爲的類。無法識別的類型 - '錯誤:變量「[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.
歡迎任何線索,修復或假設。
您有加入Physics.h到Physics.cpp? – 2012-01-14 16:25:27
PhysicsBehaviour類是什麼樣的? PhysicsBehaviourBase.h文件還有更多嗎? – user973572 2012-01-14 16:36:44