在另一个类的函数中创建一个对象导致循环?

时间:2014-11-07 21:17:17

标签: c++ function class loops game-engine

我正在使用c ++和Irrlicht引擎为大学项目创建一个游戏,我遇到了一个问题。

我有一个名为World的类,它在地图中设置引擎并加载,Main类创建这个类的对象,构造函数被称为创建世界并设置引擎(这一切都很好) !)。

但是,现在我已经创建了一个将设置相机的Player类。我必须设置相机的代码 很好 如果它与World在同一个类中:如果我在类{{1}中创建一个函数并且在构造函数中调用该函数,一切都很好。但是,每当我将此代码放入World类,然后在Player构造函数中创建Player的对象时,它就会导致类World的构造函数的无限循环。 / p>

我不想把所有的功能都放在班级World中,因为拆分它会更加整洁!

World.cpp& World.h = http://pastebin.com/qtTsGQAR

Player.cpp& World.h = http://pastebin.com/DR7aUiYf

2 个答案:

答案 0 :(得分:0)

如果Player继承自World,那么要创建Player,您必须创建World,并创建Player,这会创建一个World Player,等等无限期。

解决方案是World没有继承{{1}} 什么甚至意味着什么玩家是一个世界? 它没有多大意义。

答案 1 :(得分:0)

您的Player类是World类的子类。

class Player: public World
{
  public:
     Player();
    ~Player();

  private:
     void setup_player();
};

通过创建Player类,可以调用World的构造函数。但是,您的World构造函数会创建一个Player类的实例:

World::World()
{

    setup_engine();
    //open up the file path
    //std::fstream fin(file_path);
    //std::string command;

    //open up the world
    std::cout << "* Constructing World" << std::endl;
    //loading the first level scene
            smgr->loadScene("..\\Assets\\firstLevel.irr");
            std::cout << "** Constructing Complete" << std::endl;

            Player playerone;



}

然后,调用World类的构造函数,依此类推。