2011-12-16 2 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(Engine&); 
... 

SceneManager 클래스를 선언하기 전에 class Engine;과 같은 순방향 선언이 필요할 수 있습니다.

+0

나는 당신이 말한 것을 시도했으나 효과가 없었습니다. 나는 클래스의 선언 앞에'클래스 엔진; '을 넣었고 나는 여전히 같은 오류를 얻고있다. 실제로 추가 오류가 발생합니다. '오류 : 예상되지 않은 정식 ID가 있기 전에'} '토큰'. 기본적으로 내가 생각하는 중괄호가 필요합니다. 다른 제안? – zeboidlund

+0

@Holland 코드의 뒷부분에 클래스를 정의 할 수 있지만, 어느 정도 시간이 필요합니다. 예를 들어, 2 개의 서로 다른 클래스 사이의 순환 참조는 forward 선언을 사용하는 경우에만 가능합니다. '클래스 Foo; class Bar {Foo * ptr; }; class Foo {Bar * ptr; };'앞으로 선언 된 클래스에만 ** 가리킬 수 있습니다 **. –

+0

@NiklasR 이전에 순환 참조가 있었지만 더 이상 존재하지 않아 오류가 계속 발생하기 때문에 흥미 롭습니다. – zeboidlund

관련 문제