c++ - 비주얼뜻 - visual studio 2017 free version



PCH 경고:매크로 또는#if 블록에 헤더 중지를 사용할 수 없습니다.-Visual C++ 2010 Express SP1 (8)

이것은 아마도 작동하고있는 웹 사이트에서 붙여 넣습니다. 나는 몇몇 인터넷 검색을했고 내가 지금 가지고있는 문제는 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

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

#if #end 블록 밖에서 #include 문을 이동하십시오.


.cpp 파일을 추가하고 헤더를 포함 시키면이 오류는 사라집니다. 다른 버그가있는 부분을 읽었습니다.


IntelliSense 데이터베이스를 다시 작성하면 문제가 해결됩니다.

  1. Visual Studio 닫기
  2. [SolutionName] .sdf 삭제
  3. DllWrappers.opensdf 삭제
  4. ipch 폴더 삭제
  5. Visual Studio 열기

나는 같은 문제가 있었고 해결책을 찾고 있었다. 나를 위해 일한 다음 :

파일의 시작 부분에 #pragma once 추가합니다 ( #ifndef APP_STATE_H 헤더 가드 이전까지).


내 .h 파일이 실제로 .cpp 파일로 취급되고있는 것을 발견했습니다! 솔루션 탐색기> 모든 구성> 항목 유형 : C / C ++ 헤더에서 파일을 마우스 오른쪽 단추로 클릭하십시오.

항목 유형이 C / C ++ 컴파일러 또는 기타가 아닌지 확인하십시오.


방금 헤더 파일에 참조를 추가했습니다 (#include "header.h") 그리고 도움이되었습니다.


이것은 하루 늦었을 가능성이 높습니다.하지만 실수로 헤더 파일을 .h 파일 대신 .cpp 파일에 넣었을 때도 같은 오류가있었습니다. 나는 그것이 누군가를 도울 수있는 경우에 그것을 게시 할 것입니다.


프로젝트 템플릿을 사용하여 사전 생성 된 소스 코드 파일을 시작하고 버릴 수 있습니다. 이러한 프로젝트 템플릿은 미리 컴파일 된 헤더를 켜는 것이 시간 절약 효과가 있기 때문에 좋습니다. 솔루션 탐색기 창에서 속성, C / C ++, 미리 컴파일 된 헤더를 마우스 오른쪽 단추로 클릭합니다. "Precompiled Header"설정을 "Not Using"로 변경하십시오.





visual-c++