【问题标题】:Class redefinition problems using forward declarations使用前向声明的类重定义问题
【发布时间】:2019-04-19 13:34:08
【问题描述】:

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

我正在使用 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 文件中的标头重新定义

【问题讨论】:

  • 请张贴minimal reproducible example 而不是一些我们不能用来编译自己的文件。去掉所有不必要的声明和定义。
  • @RichardCritten 完成。对此感到抱歉
  • 一旦问题有了答案,您不应更改主题或更改反映答案的代码。你应该问一个新问题。这个完成了。请记住StackOverflow 问题的主要目的是帮助未来的读者解决同样的问题。综上所述,最初的问题可能应该作为错字关闭。

标签: c++ include forward-declaration ogre


【解决方案1】:

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

【讨论】:

  • 天哪。让我尽快解决这个问题,还有更多问题!
  • 我记不得了,但我相信 Ogre::Real 的声明不能作为非指针声明。由于这个类只是前向声明的,它不能创建一个具体的变量。
  • 好像这个微小的错误会在 Visual Studio 中引发无数编译器问题。非常感谢!
猜你喜欢
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多