2012-01-14 53 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

相关问题