Предупреждение PCH: остановка заголовка не может быть в макросе или #if block-Visual C++ 2010 Express SP1
это вставлено с веб-сайта, который предположительно работал. Я немного погуглил и обнаружил, что проблема, которую я сейчас имею, является результатом Visual C++ 2010 SP1, который я загрузил сегодня, и теперь дает мне эту ошибку:
PCH Warning: header stop cannot be in a macro or #if block.
надеюсь, кто-то сможет мне в этом помочь!
#ifndef APP_STATE_H
#define APP_STATE_H
#include "Framework.h"
class AppState; //this line is giving me the error
//define two classes
#endif
основы.h:
#ifndef OGRE_FRAMEWORK_H
#define OGRE_FRAMEWORK_H
#include <OgreCamera.h>
#include <OgreEntity.h>
#include <OgreLogManager.h>
#include <OgreOverlay.h>
#include <OgreOverlayElement.h>
#include <OgreOverlayManager.h>
#include <OgreRoot.h>
#include <OgreViewport.h>
#include <OgreSceneManager.h>
#include <OgreRenderWindow.h>
#include <OgreConfigFile.h>
#include <OISEvents.h>
#include <OISInputManager.h>
#include <OISKeyboard.h>
#include <OISMouse.h>
class OgreFramework : public Ogre::Singleton<OgreFramework>,OIS::KeyListener,OIS::MouseListener{
public:
OgreFramework();
~OgreFramework();
bool initOgre(Ogre::String 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
11 ответов:
у меня была та же проблема и искал решение. Следующие работали для меня:
добавить
#pragma onceв начале файла (даже перед#ifndef APP_STATE_Hзаголовок охранника)
вероятно, вы использовали шаблон проекта для начала работы и выбросили предварительно сгенерированные файлы исходного кода. Эти шаблоны проектов любят включать предварительно скомпилированные заголовки, потому что это такая экономия времени. Щелкните правой кнопкой мыши проект в окне Обозреватель решений, свойства, C / C++, предварительно скомпилированные заголовки. Измените параметр " предварительно скомпилированный заголовок "на"не используется".
восстановление базы данных IntelliSense решает эту проблему.
- Закрыть Visual Studio
- удалить [имя решения].sdf
- удалить DllWrappers.opensdf
- удалить ipch папку
- Открыть Visual Studio
У меня была та же проблема. Мое решение состояло в том, чтобы добавить отсутствующий ';' в конце определения класса. Хотя это, похоже, не относится к вашей проблеме, другие, которые приходят сюда с той же ошибкой, могут найти это полезным.
Это вероятно на день позже и доллар короткий, но у меня была та же ошибка, когда я случайно положил свой файл заголовка в a .cpp файл вместо a .H-файл. Я опубликую его, Хотя в случае, если это может кому-то помочь.
Я нашел, что мой .файл h фактически рассматривался как a .cpp файл! Щелкните правой кнопкой мыши на файле в обозревателе решений > все конфигурации > тип элемента: заголовок C / C++
убедитесь,что тип элемента не является компилятором C/C++ или другим.
после добавления a .cpp-файл и включить в него заголовок эта ошибка должна уйти. Я читал, где еще это ошибка.
это произошло со мной, когда я делаю это :
file a. h :
#include "b.h" . . .файл b. h:
#include "a.h" . . .
Comments