Ошибка компиляции: ожидается ')' перед '&' токеном - PullRequest
1 голос
/ 16 декабря 2011

Что-то, чего я действительно не понимаю: я не вижу ничего, что на самом деле делает эту ошибку склонной.

Вот класс:

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 Ответ

9 голосов
/ 16 декабря 2011

Вам не хватает (прямого) объявления Engine в "scenemanager.h"?Когда компилятор анализирует:

...
SceneManager(Engine&);
...

, ему требуется объявление типа Engine.Вам может потребоваться предварительное объявление, например class Engine; перед объявлением класса SceneManager.

...