2015-07-02 65 views
0

头文件在.cpp文件

class Universe 
{ 
    public: 
     Universe(); 
     ~Universe(); 

    private: 
     ChunkManager chunkManager; 
}; 

我想初始化chunkManger不使用默认的构造函数定义的对象。但是,我想使用的构造函数需要一个对象。如何使chunkManager对象在.cpp文件中使用正确的构造函数?所以,我想是这样的:

Universe::Universe(){ 

    world = new b2World(b2Vec2(0, 0)); 
    world->SetAllowSleeping(false); 

    //I want something like this because the constructor I want takes a World object 
    chunkManager = new ChunkManager(world); 

    player = new Player(world); 
} 
+0

为什么这是被压低投票?我做错了什么? – MagnusCaligo

+0

加一个从我身边。正如你试图清除你的概念。 – abhi312

+0

世界和球员从哪里来?他们不在标题中。什么是oo关系?宇宙是否应该包含一个世界,一个大块头管理者和一个球员? –

回答

0

ChunkManager在头是一个对象不是一个指针,所以chunkManager = new ChunkManager(world);是错误的。

你可以把它作为一个对象并初始化这样的:

Universe::Universe() : chunkManager(world) 
{ 

但是你没有world尚未(除非你可以把它作为一个参数)。最简单的解决方案是使标头有一个指针:

private: 
     ChunkManager* chunkManager; 

然后您的.cpp就可以了。

编辑:我假设肯尼奥斯特拉姆在评论中得到的是,因为你已经动态分配chunkManager你需要确保你在某个时刻(可能是析构函数)delete,以避免内存泄漏。

+0

请在他的破坏程序中编辑。 –

+0

他可以写宇宙:: Universe():chunkManager(world = new b2World(b2Vec2(0,0))){...} – CoffeeandCode