Class 使用前向声明的重定义问题

Class redefinition problems using forward declarations

注意:重新上传错误标记为重复的问题

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

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

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

这是header文件

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

class CameraController
{
private:
    Ogre::SceneNode* camNode;

    Ogre::SceneManager* scnMgr;
};

这是cpp文件

#include "CameraController.h"

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

... definitions of functions.

为了避免在 CameraController.h 文件

中包含不需要的 header 文件,实现我在这里尝试做的事情的正确方法是什么?

尝试修复

我尝试了 'duplicate' 中标记的重新定义,其中讨论了在命名空间中声明 类:

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

class CameraController
{
private:
    Ogre::Real getAspectRatio();

private:
    Ogre::SceneNode* camNode;

    Ogre::Camera* camera;

    Ogre::Viewport* viewPort;

    Ogre::SceneManager* scnMgr;
};

编辑

所以我现在遇到的错误是我在 Ogre 命名空间中转发声明的 类 正在被我包含在 .cpp 文件中的 header 重新定义

前向声明中ViewPort和Viewport的大小写不同。 C++ 会将它们视为不同的值。