Предупреждение 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
579   11  

11 ответов:

у меня была та же проблема и искал решение. Следующие работали для меня:

добавить #pragma once в начале файла (даже перед #ifndef APP_STATE_H заголовок охранника)

вероятно, вы использовали шаблон проекта для начала работы и выбросили предварительно сгенерированные файлы исходного кода. Эти шаблоны проектов любят включать предварительно скомпилированные заголовки, потому что это такая экономия времени. Щелкните правой кнопкой мыши проект в окне Обозреватель решений, свойства, C / C++, предварительно скомпилированные заголовки. Измените параметр " предварительно скомпилированный заголовок "на"не используется".

переместите операторы #include за пределы блока #if # end

восстановление базы данных IntelliSense решает эту проблему.

  1. Закрыть Visual Studio
  2. удалить [имя решения].sdf
  3. удалить DllWrappers.opensdf
  4. удалить ipch папку
  5. Открыть Visual Studio

1.закрыть проект. 2.Откройте проект и все ок. это мой опыт.

У меня была та же проблема. Мое решение состояло в том, чтобы добавить отсутствующий ';' в конце определения класса. Хотя это, похоже, не относится к вашей проблеме, другие, которые приходят сюда с той же ошибкой, могут найти это полезным.

Это вероятно на день позже и доллар короткий, но у меня была та же ошибка, когда я случайно положил свой файл заголовка в a .cpp файл вместо a .H-файл. Я опубликую его, Хотя в случае, если это может кому-то помочь.

Я только что добавил ссылку на файл заголовка (#include " header.ч") и это помогло.

Я нашел, что мой .файл h фактически рассматривался как a .cpp файл! Щелкните правой кнопкой мыши на файле в обозревателе решений > все конфигурации > тип элемента: заголовок C / C++

убедитесь,что тип элемента не является компилятором C/C++ или другим.

после добавления a .cpp-файл и включить в него заголовок эта ошибка должна уйти. Я читал, где еще это ошибка.

это произошло со мной, когда я делаю это :

file a. h :

#include "b.h"
.
.
.

файл b. h:

#include "a.h"
.
.
.

Comments

    Ничего не найдено.