PCH Warning: остановка заголовка не может быть в макросе или блоке #if - Visual С++ 2010 Express SP1

Это вставлено с веб-сайта, который предположительно работает. Я сделал несколько поисковых запросов и обнаружил, что проблема, с которой я столкнулся сейчас, является результатом Visual С++ 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

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

Ответ 1

У меня была такая же проблема и я искал решение. После меня работали:

Добавить #pragma once в начале файла (еще до защиты заголовка #ifndef APP_STATE_H)

Ответ 2

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

Ответ 3

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

Ответ 4

1. Закройте проект. 2.Резируйте проект, и все в порядке. это мое expeirence.

Ответ 5

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

  • Закрыть Visual Studio
  • Удалить [SolutionName].sdf
  • Удалить DllWrappers.opensdf
  • Удалить папку ipch
  • Открыть Visual Studio

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

Ответ 11

Я использую Visual Studio для редактирования проектов Linux. Для меня проблема присутствовала, когда я включал string.h в мой предварительно скомпилированный заголовочный файл. Это было вызвано строками с оператором __asm, например:

__THROW __asm ("memchr") __attribute_pure__ __nonnull ((1));

Решением было определить следующий макрос в свойствах проекта, свойствах конфигурации, C/C++, препроцессоре, определениях препроцессора:

__asm(x)=

Ответ 12

это случается со мной, когда я это делаю:

file a.h:

#include "b.h"
.
.
.

файл b.h:

#include "a.h"
.
.
.