Как вы перенаправляете объявления классов, которые существуют в пространстве имен?

Я работаю с Ogre, но мой вопрос касается именно пространств имен.

Я не смог найти ответ, который помог бы мне здесь.

Я пытаюсь переслать классы Ogre::xyz в моем заголовочном файле для CameraController.

Это заголовочный файл

#pragma once

#ifndef _CAMCONTROL_H_
#define _CAMCONTROL_H_

class Ogre;
class Ogre::SceneNode;
class Ogre::SceneManager;

class CameraController
{
public:
    CameraController();
    ~CameraController();
    CameraController(Ogre::SceneManager& scnMgrRef);

private:
    Ogre::SceneNode* camNode;

    Ogre::SceneManager* scnMgr;
};

#endif

Это файл cpp

#include "CameraController.h"

#include <OgreSceneManager.h>
#include <OgreSceneNode.h>



CameraController::CameraController()
{
     scnMgr = nullptr;
     camNode = nullptr;
}


CameraController::~CameraController()
{
    delete camNode;
}

CameraController::CameraController(Ogre::SceneManager & scnMgrRef) 
{
    scnMgr = &scnMgrRef;
}

Каков правильный способ добиться того, что я пытаюсь сделать здесь, избегая включения ненужных файлов заголовков в файл CameraController.h

ИЗМЕНИТЬ

Я попытался переопределить, как указано в дубликате:

#pragma once


#ifndef _CAMCONTROL_H_
#define _CAMCONTROL_H_

namespace Ogre
{
    class SceneManager;
    class SceneNode;
    class Camera;
    class ViewPort;
    class Real;
}




class Ogre3DApplication;


const int INITIAL_CAM_X = 3000;
const int INITIAL_CAM_Y = 3000;
const int INITIAL_CAM_Z = 3000;


class CameraController
{
public:
    CameraController();
    ~CameraController();
    CameraController(Ogre::SceneManager& scnMgrRef, Ogre3DApplication& parent);

private:
    Ogre::Real getAspectRatio();



private:
    Ogre::SceneNode* camNode;

    Ogre::Camera* camera;

    Ogre::Viewport* viewPort;

    Ogre::SceneManager* scnMgr;
};

#endif

Компилятор все равно выдает ошибки.

Самое интересное одно: Viewport не входит в состав Ogre.


person Natalo77    schedule 19.04.2019    source источник
comment
Я, конечно, хотел бы увидеть ответы на этот конкретный вопрос. Сообщенный предыдущий ответ не совсем такой же, и ответы не совсем ясны, ref include.   -  person zipzit    schedule 19.04.2019
comment
избегая включения ненужного заголовка, вам нужно включить этот заголовок, потому что этот файл использует объявления из этого заголовка. Дублирование необходимых объявлений из этого заголовка вручную не является хорошей идеей.   -  person user7860670    schedule 19.04.2019
comment
Ну нет? Мне нужно использовать только указатели/ссылки в файле заголовка, поэтому я должен иметь возможность перенаправить объявление этих классов в заголовок, а затем включить определяющие файлы заголовков в файл исходного кода.   -  person Natalo77    schedule 19.04.2019