Méconnu de type 'Erreur: Variable “[var-nom]” n'est pas un nom de type'

Je suis de la création d'une classe pour la gestion de la physique dans le cadre d'un projet. On nous a dit d'utiliser une classe qui gère les comportements arbitraires.

J'ai créé une classe qui permettra de mettre à jour un état interne fondée sur les modules qui lui sont données (code suit). Cependant, la structure qui représente l'état interne, PhysicsData, n'est pas reconnue n'importe où sauf à son propre fichier. Quelqu'un peut jeter un peu de lumière?

(Désolé pour les gros vidage de l'information, mais l'écart entre l'objet à un problème et le lieu où il est un problème qui est assez grande et coupe vers le bas les détails supplémentaires supprime également le contexte qui peut être utile)

Voici la structure en question:

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

Toutes les références à PhysicsData dans le reste de ce fichier sont beaux. Cependant ce fichier commence à faire allusion à des problèmes:

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

Dans le void update(float time,const PhysicsData&, PhysicsData* out) ligne à la fois des références à PhysicsData sont donné l'IntelliSense message d'erreur:

Physics PhysicsData 

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

Je n'ai aucune idée de pourquoi IntelliSense pense PhysicsData est une variable de type Physics. (Physics est un type que je déclarer prochaine, et PhysicsData est l'un des paramètres utilisés pour construire un objet physique).

Il n'y a pas d'erreur de compilation, à ce stade, cependant. L'erreur de compilation se produit dans le fichier suivant haut de la hiérarchie:

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

À la fois des références à PhysicsData obtenir le même IntelliSense d'erreur comme ci-dessus. Les erreurs de compilateur point à cette fonction:

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

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

Des erreurs du compilateur:

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

Et plus IntelliSense erreurs:
Sous la & dans const PhysicsData& partir de la ligne 4:

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

En dessous de la fermer la parenthèse sur la ligne 4:

Error: expected a declaration.

Des indices, des correctifs ou des hypothèses sont les bienvenus.

Avez-vous inclus Physique.h en Physics.cpp?
Ce qui ne l'PhysicsBehaviour classe? Est-il plus du PhysicsBehaviourBase.h fichier?

OriginalL'auteur Arkady | 2012-01-14