10
votes

Erreur de syntaxe manquante; avant *

J'ai un fichier d'en-tête comme: xxx pré>

Le problème avec c'est que je reçois les erreurs suivantes de VC 8: p> xxx pré> (Ils se réfèrent tous à la dernière ligne) p>

J'ai une classe EXITLISTENER.H CODE> C'est pourquoi je ne reçois pas les erreurs p>

EDIT: EXITLISTENER.H: EM> 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 commentaires

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, 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 ...").


6 Réponses :


0
votes

Je soupçonne que vous manquez que l'Ogre inclut quelque part sur votre chaîne incluant.

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 . .


0 commentaires

28
votes

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 ExitListener,

EDIT : 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.


1 commentaires

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.



1
votes

L'erreur est dans le fichier EXITLISTENER.H (ou l'un des fichiers qu'il inclut). Souvent, ce problème est dû à un manquant; à la fin de la classe.

Si vous ajoutez le code de ce fichier, je pourrai vous aider plus loin.


0 commentaires

1
votes

le problème SortiListener a été mal déclaré. C'est la seule solution pour que vs de dire cela. Vérifiez qu'il n'y avait aucune erreur lors de la compilation de la classe ExitListener. (et que vous n'avez pas oublié le sentier ";")

une note latérale 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.


0 commentaires

2
votes

Apparemment, le problème est avec la définition de sortie de sortie, il n'est pas considéré comme valide à ce moment-là.


0 commentaires

5
votes
  1. Les erreurs ne font pas référence à la dernière ligne, mais à la ligne avant la dernière ligne. (S'il vous plaît soyez précis. Si les gens connaissent bien le compilateur qui émet ce message d'erreur, leurs suppositions peuvent être beaucoup mieux s'ils connaissent la ligne exacte qu'elle est donnée.)
  2. "SortiListener.h" n'est pas une classe, mais un en-tête. (Ce n'est pas Java.) On supposerait qu'il existe une classe EXITLISTENER 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.
  3. 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 ; à la fin de la définition 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 est.
  4. 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; est suffisamment suffisante pour déclarer le EXITLISTENER * MFRAMELISNER Membre. (Vous devrez inclure la définition de la classe complète afin de mettre en œuvre les fonctions de membre initialgamestate sur ExitListener , cependant. Si vous implémentez ces fonctions dans l'en-tête où Initialgamestate est défini, vous devrez garder cette "sortieListenner.h" include.)

0 commentaires