0

我有两个类:WorldEntity

在 World 内部,我有两个 Entity 指针,我是这样制作的:

Entity* ent1;
Entity* ent2;

我想允许 Entity 对象调用 World 的公共成员函数。我认为我可以简单地将引用或世界的指针传递给实体。

但是当我包含World.hfrom时Entity.h,我开始收到错误。这似乎有点错误,因为它们相互包含,但我不知道如何实现此功能。

在其他编程语言中我见过parent关键字,在 C++ 中有类似的东西吗?

4

3 回答 3

1

EntityWorld.h中前向声明类。

世界.h:

class Entity; // #include "Entity.h" is not needed, because
              // only a pointer to Entity is used at the moment.

class World {
  public:
    void foo() {}

    void letEntityDoFooToMe(); // Implementation must be defined later, because it
                               // will use the whole Entity class, not just a
                               // pointer to it.
  private:
    Entity* e;
};

实体.h:

#include "World.h" // Needed because Entity::doFooToWorld calls a method of World.

class Entity {
  public:
    Entity(World& world) : w(world) {}

    void doFooToWorld() {
      w.foo();
    }

  private:
    World& w;  
};

世界.cpp:

#include "World.h"  // Needed because we define a method of World.
#include "Entity.h" // Needed because the method calls a method of Entity.

void World::letEntityDoFooToMe() {
  e->doFooToWorld();
}
于 2013-04-22T22:51:38.860 回答
0

您可以做的是使父类中的方法成为虚拟方法并在实体类中覆盖它。

class World
{
public:
    virtual void Func();
}


class Entity: public World
{
public:
    void Func();
}
于 2013-04-22T22:48:30.407 回答
0

根据您的描述,我的猜测是您遇到了一些循环依赖问题。您是否尝试过使用#pragma 一次。这是一个参考链接。如果您不喜欢这样,您也可以尝试在每个标题中添加一些 ifndef。

// World.h
#ifndef WORLD_H
#define WORLD_H

// ... World declaration code goes here.

#endif

// Entity.h
#ifndef ENTITY_H
#define ENTITY_H

// ... Entity declaration code goes here.

#endif
于 2013-04-22T22:49:06.043 回答