首页 > 解决方案 > 使用前向声明的类重定义问题

问题描述

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

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

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

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

这是头文件

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 文件中包含不需要的头文件

尝试修复

我尝试了在“重复”中标记的重新定义,该“重复”谈到在命名空间中声明类:

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 文件中的标头重新定义

标签: c++includeforward-declarationogre

解决方案


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


推荐阅读