これは、おそらく機能していた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
同じ問題があり、解決策を探していました。以下は私のために働いた:
ファイルの先頭に#pragma once
を追加します(#ifndef APP_STATE_H
ヘッダーガードの前でも)
おそらく、プロジェクトテンプレートを使用して開始し、事前に生成されたソースコードファイルを破棄しました。これらのプロジェクトテンプレートは、プリコンパイル済みヘッダーをオンにするのが好きです。 [ソリューションエクスプローラー]ウィンドウ、[プロパティ]、[C/C++]、[プリコンパイル済みヘッダー]でプロジェクトを右クリックします。 「プリコンパイル済みヘッダー」設定を「使用しない」に変更します。
1.プロジェクトを閉じます。 2.プロジェクトを再度開き、すべてOK。これは私の経験です。
#ifステートメントを#if #endブロックの外側に移動します
IntelliSenseデータベースを再構築すると、問題が解決します。
同じ問題がありました。私の解決策は、欠落している「;」を追加することでしたクラス定義の最後。これはあなたの問題には当てはまらないようですが、同じエラーでここに来る他の人はこれが役に立つかもしれません。
ヘッダーファイル(#include "header.h")への参照を追加したところ、役に立ちました。
私の.hファイルは実際には.cppファイルとして扱われていることがわかりました!ソリューションエクスプローラーでファイルを右クリックし、[すべての構成]> [アイテムの種類:C/C++ヘッダー]
アイテムタイプがC/C++コンパイラなどではないことを確認してください。
これは1日遅れで1ドルも短い可能性がありますが、誤ってヘッダーファイルを.hファイルではなく.cppファイルに置いたときに同じエラーが発生しました。誰かを助けることができる場合は、それを投稿します。
Visual Studioを使用してLinuxプロジェクトを編集します。私にとっては、プリコンパイル済みヘッダーファイルにstring.hを含めると問題が発生しました。 __asmステートメントがある行が原因でした。例:
__THROW __asm ("memchr") __attribute_pure__ __nonnull ((1));
解決策は、プロジェクトプロパティ、構成プロパティ、C/C++、プリプロセッサ、プリプロセッサ定義で次のマクロを定義することでした。
__asm(x)=
.cppファイルを追加してヘッダーを含めると、このエラーは消えます。私はこれがバグである他の場所をいくつか読みました。