Avertissement PCH: l’arrêt d’en-tête ne peut pas être dans une macro ou un bloc #if – Visual C ++ 2010 Express SP1

Ceci est collé à partir d’un site Web, qui fonctionnait probablement. J’ai fait une recherche sur Google et j’ai constaté que le problème que je rencontrais maintenant était le résultat de Visual C ++ 2010 SP1, que j’ai téléchargé aujourd’hui, et qui me donne maintenant cette erreur:

PCH Warning: header stop cannot be in a macro or #if block.

J’espère que quelqu’un pourra m’aider avec ça!

 #ifndef APP_STATE_H #define APP_STATE_H #include "Framework.h" class AppState; //this line is giving me the error //define two classes #endif 

Framework.h:

 #ifndef OGRE_FRAMEWORK_H #define OGRE_FRAMEWORK_H #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  class OgreFramework : public Ogre::Singleton,OIS::KeyListener,OIS::MouseListener{ public: OgreFramework(); ~OgreFramework(); bool initOgre(Ogre::Ssortingng wndTitle, OIS::KeyListener *pKeyListener = 0, OIS::MouseListener *pMouseListener = 0); void updateOgre(double timeSinceLastFrame); //OIS bool keyPressed(const OIS::KeyEvent &keyEventRef); bool keyReleased(const OIS::KeyEvent &keyEventRef); bool mouseMoved(const OIS::MouseEvent &evt); bool mousePressed(const OIS::MouseEvent &evt, OIS::MouseButtonID id); bool mouseReleased(const OIS::MouseEvent &evt, OIS::MouseButtonID id); Ogre::Root* mRoot; Ogre::RenderWindow* mRenderWnd; Ogre::Viewport* mViewport; Ogre::Log* mLog; Ogre::Timer* mTimer; //OIS OIS::InputManager* mInputMgr; OIS::Keyboard* mKeyboard; OIS::Mouse* mMouse; private: OgreFramework(const OgreFramework&); OgreFramework& operator= (const OgreFramework&); }; #endif 

J’ai eu le même problème et cherchais une solution. Après a travaillé pour moi:

Ajoutez #pragma once au début du fichier (même avant la #ifndef APP_STATE_H tête #ifndef APP_STATE_H )

Vous avez probablement utilisé un modèle de projet pour démarrer et jeté les fichiers de code source pré-générés. Ces modèles de projet permettent d’activer les en-têtes précompilés, car ils permettent de gagner du temps. Cliquez avec le bouton droit de la souris sur votre projet dans la fenêtre Explorateur de solutions, Propriétés, C / C ++, en-têtes précompilés. Remplacez le paramètre “En-tête précompilé” par “Ne pas utiliser”.

déplacer les instructions #include en dehors du bloc #if #end

La reconstruction de la firebase database IntelliSense résout le problème.

  1. Fermer Visual Studio
  2. Supprimer [SolutionName] .sdf
  3. Supprimer DllWrappers.opensdf
  4. Supprimer le dossier ipch
  5. Ouvrez Visual Studio

1. Fermez le projet. 2.Réouvrez le projet, et tout va bien. c’est mon expérience.

J’ai eu le même problème. Ma solution a été d’append un ‘; à la fin d’une définition de classe. Bien que cela ne semble pas s’appliquer à votre problème, d’autres personnes qui viennent ici avec la même erreur peuvent trouver cela utile.

C’est probablement un jour de retard et un dollar de moins, mais j’ai eu la même erreur lorsque j’ai accidentellement mis mon fichier d’en-tête dans un fichier .cpp au lieu d’un fichier .h. Je le posterai bien au cas où cela pourrait aider quelqu’un.

Je viens d’append une référence au fichier d’en-tête (#include “header.h”) et cela m’a aidé.

J’ai trouvé que mon fichier .h était en fait traité comme un fichier .cpp! Cliquez avec le bouton droit sur le fichier dans l’Explorateur de solutions> Toutes les configurations> Type d’élément: en-tête C / C ++

Assurez-vous que le type d’élément n’est pas un compilateur C / C ++ ou autre.

Une fois que vous ajoutez un fichier .cpp et l’incluez dans l’en-tête, cette erreur devrait disparaître. J’en ai lu d’autres où c’est un bug.

cela m’est arrivé quand je fais ceci:

fichier ah:

 #include "bh" . . . 

fichier bh:

 #include "ah" . . .