J'ai un fichier d'en-tête comme: Le problème avec c'est que je reçois les erreurs suivantes de VC 8: p> J'ai une classe EDIT: EXITLISTENER.H: EM> P> EXITLISTENER.H CODE> C'est pourquoi je ne reçois pas les erreurs p> #pragma once
#include <Ogre.h>
#include <OIS/OIS.h>
#include <CEGUI/CEGUI.h>
#include <OgreCEGUIRenderer.h>
#include "Thing.h"
#include "InitialGameState.h"
using namespace Ogre;
class ExitListener : public FrameListener, public OIS::KeyListener, public OIS::MouseListener
{
public:
ExitListener(OIS::Keyboard *keyboard, OIS::Mouse *mouse, Camera *cam, std::vector<Thing*> &vec):
mKeyboard(keyboard), r(0.09), mContinue(true), mRunningAnimation(false),
mMouse(mouse), mYaw(0), mPitch(0), things(vec), mCamera(cam), mWDown(false), mSDown(false), mADown(false),
mDDown(false)
{
things = vec;
mKeyboard->setEventCallback(this);
mMouse->setEventCallback(this);
}
bool frameStarted(const FrameEvent& evt);
bool keyPressed(const OIS::KeyEvent &e);
bool keyReleased(const OIS::KeyEvent &e);
bool mouseMoved(const OIS::MouseEvent &e);
bool mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id);
bool mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id);
void setOwner(GameState *g);
private:
AnimationState *mSwim;
Radian r;
Radian mYaw;
Radian mPitch;
OIS::Keyboard *mKeyboard;
OIS::Mouse *mMouse;
Camera *mCamera;
bool mContinue;
bool mRunningAnimation;
std::vector<Thing*> &things;
bool mWDown;
bool mADown;
bool mDDown;
bool mSDown;
GameState *mOwner;
};
6 Réponses :
Je soupçonne que vous manquez que l'Ogre inclut quelque part sur votre chaîne incluant. P>
Mon hypothèse est basée sur les petites connaissances dont j'ai sur vos autres fichiers d'en-tête et VC alertant qu'il manque un spécificateur de type: Spécificateur de type manquant code>. P>.
Mon hypothèse est que SortiListener.h incluait InitialGamestate.h Fichier d'en-tête directement ou indirectement. Il existe donc une dépendance circulaire entre le fichier d'en-tête et le compilateur est incapable de trouver la déclaration pour ExitListener. Si vous avez juste besoin de stocker le pointeur d'ExitListener dans cette classe, il n'est pas nécessaire d'inclure le fichier d'en-tête ExitListener.h. Au lieu de cela, vous pouvez simplement utiliser la déclaration à terme comme EDIT FORT>: Vous pouvez utiliser la déclaration à terme comme suggérée ci-dessus ou supprimer l'initialgamestate.h include à partir d'ExitListener.h. Vous devez inclure GameState.h (le fichier d'en-tête de classe de base) uniquement. Mais je préfère utiliser les déclarations avant dans le fichier d'en-tête et inclure le fichier d'en-tête uniquement dans le CPP. P> ExitListener, Code> P>
S'il s'agit d'une syntaxe d'erreur dans l'EXITLISTENER.H Fichier, l'erreur sera toujours ici mais dans le fichier de mise en œuvre où la classe EXITLISTENER est utilisée.
L'erreur est dans le fichier EXITLISTENER.H (ou l'un des fichiers qu'il inclut). Souvent, ce problème est dû à un Si vous ajoutez le code de ce fichier, je pourrai vous aider plus loin. P> manquant; code> à la fin de la classe. P>
une note latérale forte>
Ici vous utilisez un pointeur pour sortirlistener. Vous n'avez pas besoin de connaître la taille ou la disposition interne d'ExitListener si vous déclarez simplement un pointeur.
Une déclaration avant serait suffisante. P>
Apparemment, le problème est avec la définition de sortie de sortie, il n'est pas considéré comme valide à ce moment-là. P>
EXITLISTENER CODE> définie (ou au moins déclarée) à l'intérieur de cet en-tête, mais il pourrait aussi bien être une autre classe, aucune autre classe, aucune ou de nombreuses classes. li>
- Sans cet en-tête, il est impossible de dire exactement ce qui ne va pas, bien que des dépendances circulaires entre ces deux en-têtes ou un
; code> à la fin de la définition code> de classe "/ code> est une très bonne supposition qui correspond à mon expérience avec de telles erreurs. À tout le moins, je suis sûr que l'erreur signifie que le compilateur ne sait pas ce que EXITLISTENER code> est. LI>
- Comme d'autres l'ont dit, vous n'avez pas besoin d'une définition de classe afin de déclarer un pointeur à cette classe. besoin d'inclure l'en-tête du tout. Une déclaration simple de déclaration
ExitListener de classe; code> est suffisamment suffisante pour déclarer le EXITLISTENER * MFRAMELISNER CODE> Membre. (Vous devrez inclure la définition de la classe complète afin de mettre en œuvre les fonctions de membre initialgamestate code> sur ExitListener code>, cependant. Si vous implémentez ces fonctions dans l'en-tête où Initialgamestate code> est défini, vous devrez garder cette "sortieListenner.h" include.) Li>
ol>
L'erreur est probablement dans un fichier d'en-tête au-dessus de celui-ci, ou peut-être que votre classe est dans un espace de noms.
Ah, je peux voir le problème là-bas, à SortiListener.h.
Pourrait être un problème de commande #include aussi.
Qu'est-ce qui est dans sortieListener.h? Que se passe-t-il si vous insérez la ligne
ExitListener, code> après les instructions incluées?Pouvez-vous nous montrer le contenu de sortie écouteur.h?
Vous pouvez déboguer #include des problèmes de commande en délivrant des messages de débogage pendant la compilation avec par exemple. #pragma message ("Voici la classe ExitListener ...").