2011-12-16 7 views
1

これは本当に理解できないものです。実際にこのエラーを起こしやすいものは何もありません。参照のためにいくつかの他のクラスと一緒にコンパイルエラー:期待値 ')' before '&'トークン

namespace Engine_Main { 

class SceneManager 
{ 
public: 
    SceneManager(Engine& engine); 
    void createScene(); 
private: 
    Ogre::SceneManager * mSceneMgr; 
}; 


} 

#ifndef ENGINE_H 
#define ENGINE_H 

#include <OGRE/OgreSceneManager.h> 
#include <OGRE/OgreRoot.h> 
#include "scenemanager.h" 
#include "playerinput.h" 

namespace Engine_Main { 

class Engine 
{ 
public: 
    Engine(); 
    ~Engine(); 

    void initGameLoop(); 

    PlayerInput * getPlayerInput(); 
    PlayerMovement * getPlayerMovement(); 
    Ogre::Root * getOgreRoot(); 

private: 

    //fields 
    PlayerInput * mPInput; 
    PlayerMovement * mPMovement; 
    Ogre::Root * mRoot; 
    //methods 
    void registerInput(); 
    void createScene(); 
    void renderPosition(); 
}; 

} 

#endif // ENGINE_H 

#include "engine.h" 


namespace Engine_Main { 

    /**********/ 
    /* PUBLIC */ 
    /**********/ 

    PlayerMovement * Engine::getPlayerMovement() { 
     return mPMovement; 
    } 

    PlayerInput * Engine::getPlayerInput() { 
     return mPInput; 
    } 

    Engine::Engine() { 
     mPInput = new PlayerInput(); 
     mPMovement = new PlayerMovement(); 
     mRoot = new Ogre::Root("cfg/plugins.cfg", "cfg/engine.cfg", "cfg/engine.log"); 
    } 

    Engine::~Engine(){ 
     if (mPInput) { 
      delete mPInput; 
     } 

     if (mRoot) { 
      delete mRoot; 
     } 
    } 

    void Engine::createScene() { 

    } 

} 

私の質問

それは私が間違ってやっていることは何ですか。ここ

は、クラスですか?

+1

あなたの質問がありますか? –

+0

エラーと行番号を転記できますか?それは簡単だろう。 – cppcoder

+1

この情報には答えがありません。あなたは本当に私たちにエラーの文脈を伝えていません。どのファイルと行番号ですか?そのファイルのテキストは何ですか? – bobbymcr

答えて

9

Engineの(前方)宣言が"scenemanager.h"にありますか?コンパイラが次のように解析すると、Engine型の宣言が必要です。 SceneManagerクラスの宣言の前に、class Engine;のような前方宣言が必要な場合があります。

+0

私はあなたが言ったことを試しましたが、うまくいかなかった。クラスの宣言の前に 'class Engine; 'を入れても、やはり同じエラーが出ます。私は実際には追加のエラーが発生します: 'error:expected unqualified-id before '}' token'これは基本的に私が思う中括弧を必要とすることを意味します。その他の提案はありますか? – zeboidlund

+0

@Hollandコードの後の位置にクラスを定義することができますが、その前にしばらくする必要があります。たとえば、2つの異なるクラス間の循環参照は、前方宣言を使用してのみ可能です。 'クラスFoo; class Bar {Foo * ptr; };クラスFoo {Bar * ptr; }; 'あなたは前方宣言されたクラスに** ** **しか使えないことに注意してください。 –

+0

@NiklasR 以前は循環参照がありましたが、これ以上はなく、まだエラーが発生しているので、面白いです。 – zeboidlund

関連する問題