web-dev-qa-db-ja.com

PCH警告:ヘッダーストップをマクロまたは#ifブロックに含めることはできません-Visual C ++ 2010 Express SP1

これは、おそらく機能していたWebサイトから貼り付けられます。私はいくつかのグーグルをしましたが、私が今持っている問題は、今日ダウンロードした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
67
pighead10

同じ問題があり、解決策を探していました。以下は私のために働いた:

ファイルの先頭に#pragma onceを追加します(#ifndef APP_STATE_Hヘッダーガードの前でも)

87
Kash

おそらく、プロジェクトテンプレートを使用して開始し、事前に生成されたソースコードファイルを破棄しました。これらのプロジェクトテンプレートは、プリコンパイル済みヘッダーをオンにするのが好きです。 [ソリューションエクスプローラー]ウィンドウ、[プロパティ]、[C/C++]、[プリコンパイル済みヘッダー]でプロジェクトを右クリックします。 「プリコンパイル済みヘッダー」設定を「使用しない」に変更します。

15
Hans Passant

1.プロジェクトを閉じます。 2.プロジェクトを再度開き、すべてOK。これは私の経験です。

5
One Double

#ifステートメントを#if #endブロックの外側に移動します

5
Nour

IntelliSenseデータベースを再構築すると、問題が解決します。

  1. Visual Studioを閉じます
  2. 削除[SolutionName] .sdf
  3. 削除DllWrappers.opensdf
  4. 削除ipchフォルダー
  5. Visual Studioを開きます
3
vahapt

同じ問題がありました。私の解決策は、欠落している「;」を追加することでしたクラス定義の最後。これはあなたの問題には当てはまらないようですが、同じエラーでここに来る他の人はこれが役に立つかもしれません。

2
Fabian

ヘッダーファイル(#include "header.h")への参照を追加したところ、役に立ちました。

1
Ilan

私の.hファイルは実際には.cppファイルとして扱われていることがわかりました!ソリューションエクスプローラーでファイルを右クリックし、[すべての構成]> [アイテムの種類:C/C++ヘッダー]

アイテムタイプがC/C++コンパイラなどではないことを確認してください。

1
AndyG

これは1日遅れで1ドルも短い可能性がありますが、誤ってヘッダーファイルを.hファイルではなく.cppファイルに置いたときに同じエラーが発生しました。誰かを助けることができる場合は、それを投稿します。

1
doug

Visual Studioを使用してLinuxプロジェクトを編集します。私にとっては、プリコンパイル済みヘッダーファイルにstring.hを含めると問題が発生しました。 __asmステートメントがある行が原因でした。例:

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

解決策は、プロジェクトプロパティ、構成プロパティ、C/C++、プリプロセッサ、プリプロセッサ定義で次のマクロを定義することでした。

__asm(x)=
0
George Valkov

.cppファイルを追加してヘッダーを含めると、このエラーは消えます。私はこれがバグである他の場所をいくつか読みました。

0
codyj110