无法识别的类型 - '错误:变量“[var-name]”不是类型名称'
我正在创建一个用于处理物理作为项目一部分的类。我们被告知使用一个处理任意行为的类。无法识别的类型 - '错误:变量“[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.cpp
:
Physics::Physics(const PhysicsData& initalState,const BEHAVIOUR_LIST& behaviour)
^^^^^^^^^
...只是想为自己失去一个明显的一击而sla myself自己。我对之前的IntelliSense错误感到吃惊,我完全没有检查到这一点。 – Arkady 2012-01-14 17:18:44
显然很多其他人也错过了它的基础上的数量的意见。 – user973572 2012-01-14 18:42:18
您有加入Physics.h到Physics.cpp? – 2012-01-14 16:25:27
PhysicsBehaviour类是什么样的? PhysicsBehaviourBase.h文件还有更多吗? – user973572 2012-01-14 16:36:44