【问题标题】:C++ forward declarations with multiple classes, derived class具有多个类、派生类的 C++ 前向声明
【发布时间】:2020-06-04 06:06:18
【问题描述】:

目前我有 3 个班级,设置如下:

世界.h

include "WorldObject.h"
class WorldObject;
class TextObject; // when this is added, compiles fine, but tobj is incomplete when accessed 
//(world->tobj->function()).  if #include "TextObject.h" is added, numerous errors occur within TextObject.h
class World { 
public:
      WorldObject* wobj; // works fine
      TextObject* tobj; //trying to get this to be functional
};

WorldObject.h

#include "World.h"
class World;
class WorldObject {
public:
      WorldObject(World* world){...} // works fine, world can be accessed from world objects
};

TextObject.h

#include "WorldObject.h"
#include "World.h"
class TextObject : WorldObject {
public:
      TextObject(World* world) : WorldObject(w){...};
};

如何使用前向声明,以便可以从 World.h 访问 tobj,就像 obj 一样,没有错误?我也在每节课开始时使用#pragma 一次。我曾尝试将“class World”添加到 TextObject.h 并将“class TextObject”添加到 World.h,但看似标准的程序都不起作用。有什么建议吗?

【问题讨论】:

  • 如果您尝试在 World.h 中添加 #include "TextObject.h" 并同时在 TextObject.h 中添加 class World; 会发生什么如果出现错误,它们到底是什么?
  • #include <WorldObject.h> 在您的 .cpp 文件中而不是您的标头中,您可以从那里访问它。您的标头包含导致循环依赖,您可以通过前向声明避免这种情况。
  • @Kai 修复了它!这么愚蠢的错误哈哈。如果您愿意,可以将其发布为答案,我将标记为正确。非常感谢。

标签: c++ derived-class forward-declaration


【解决方案1】:

#include <WorldObject.h> 在您的 .cpp 文件中而不是您的标题中,您可以从那里访问它。

您的标头包含导致循环依赖,您可以通过前向声明避免这种情况。

【讨论】:

    猜你喜欢
    • 2012-06-06
    • 2011-11-18
    • 1970-01-01
    • 2015-02-24
    • 2021-12-25
    • 1970-01-01
    • 2023-03-16
    • 2021-05-28
    相关资源
    最近更新 更多