Ответ 1
У меня была такая же проблема и я искал решение. После меня работали:
Добавить #pragma once
в начале файла (еще до защиты заголовка #ifndef APP_STATE_H
)
Это вставлено с веб-сайта, который предположительно работает. Я сделал несколько поисковых запросов и обнаружил, что проблема, с которой я столкнулся сейчас, является результатом 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
У меня была такая же проблема и я искал решение. После меня работали:
Добавить #pragma once
в начале файла (еще до защиты заголовка #ifndef APP_STATE_H
)
Вероятно, вы использовали шаблон проекта для начала работы и выбросили предварительно созданные файлы исходного кода. Эти шаблоны проектов включают включение предварительно скомпилированных заголовков, поскольку это такая экономия времени. Щелкните правой кнопкой мыши свой проект в окне "Обозреватель решений", "Свойства", "С/C++", "Предварительно скомпилированные заголовки". Измените параметр "Предварительно скомпилированный заголовок" на "Не использовать".
переместите операторы #include вне блока #if #end
1. Закройте проект. 2.Резируйте проект, и все в порядке. это мое expeirence.
Восстановление базы данных IntelliSense решает проблему.
У меня была та же проблема. Мое решение заключалось в том, чтобы добавить отсутствующий ';' в конце определения класса. Хотя это, похоже, не относится к вашей проблеме, другие, которые приходят сюда с такой же ошибкой, могут найти это полезным.
Вероятно, поздний день и короткий доллар, но у меня была такая же ошибка, когда я случайно поместил свой заголовочный файл в файл .cpp вместо файла .h. Я отправлю его, хотя в случае, если он может помочь кому-то.
Я просто добавил ссылку в заголовочный файл (#include "header.h" ), и это помогло.
Я обнаружил, что мой .h файл фактически обрабатывается как .cpp файл! Щелкните правой кнопкой мыши файл в обозревателе решений > Все конфигурации > Тип элемента: заголовок C/С++
Убедитесь, что тип элемента не является компилятором C/С++ или другим.
Как только вы добавите файл .cpp и включите заголовок, эта ошибка должна исчезнуть. Я читал, где еще это ошибка.
Я использую Visual Studio для редактирования проектов Linux. Для меня проблема присутствовала, когда я включал string.h в мой предварительно скомпилированный заголовочный файл. Это было вызвано строками с оператором __asm, например:
__THROW __asm ("memchr") __attribute_pure__ __nonnull ((1));
Решением было определить следующий макрос в свойствах проекта, свойствах конфигурации, C/C++, препроцессоре, определениях препроцессора:
__asm(x)=
это случается со мной, когда я это делаю:
file a.h:
#include "b.h"
.
.
.
файл b.h:
#include "a.h"
.
.
.