从另一个类中实例化的对象调用函数

时间:2011-01-13 05:44:22

标签: c++

我有两个类,这两个类都需要能够调用相同的entitymanager实例

class Engine
{
  EntityManager::Entitymanager EManager;
}

我需要将一个对象添加到此特定Engine实例所包含的向量中。我想要做的是能够将玩家产生的子弹添加到包含我所有实体的向量中。

class Player : Entity
{
  void SpawnBullet() {Engine::EManager.Add(BULLET);}
}

以上内容会返回此错误:

错误:引用'Engine :: EManager'

时缺少对象

我该如何解决这个问题?任何有关正确方向的帮助或指示都会非常感激!

2 个答案:

答案 0 :(得分:4)

您正试图在没有与之关联的类实例的情况下访问EManager。

有两个解决方案。

您必须拥有Engine实例才能访问EManager:

class Engine {
    EntityManager::Entitymanager EManager;
};

然后您可以通过以下方式访问EManager

m_engine.EManager.Add(BULLET)

你必须让EManager成为引擎的静态成员(也就是说,它只会绑定到类范围,你不需要它的实例):< / p>

class Engine {
public:
    static EntityManager::Entitymanager EManager;
};

然后你可以像现在一样访问它(它必须是公开的,或者你的课程必须是朋友)。

但我觉得你需要a good introductory C++ book理解你想要实现的目标。当你在这里时,也可以获得一个软件工程;)。

答案 1 :(得分:1)

  

我有两个课程,两个都需要   能够调用相同的实例   实体经理

您似乎需要实施Singleton pattern。看看link,也许你的课程设计很好!