如何转发声明在命名空间中的类?

时间:2019-04-19 10:15:35

标签: c++ namespaces forward-declaration ogre

我正在使用Ogre,但我的问题专门存在于名称空间中。

我无法在这里找到对我有帮助的答案。

我正在尝试在我的CameraController头文件中转发声明的Ogre :: xyz类。

这是头文件

#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

编译器仍会引发错误。

最有趣的是,一个:视口不是Ogre的成员。

0 个答案:

没有答案