2013-04-10 129 views
0

我想從另一個類訪問一個私有靜態變量(* PhysicsEngine :: _world - > setDebugDrawer(& debugDraw); *)。C++如何訪問另一個類中的私有靜態變量

第一類:

namespace GameEngine 
{ 
    class PhysicsEngine 
    { 
    private: 
     // Pointer to Bullet's World simulation 
     static btDynamicsWorld* _world; 

二等:

bool Game::initialise() 
    { 
     _device = irr::createDevice(irr::video::EDT_OPENGL, 
            _dimensions, 
            16, 
            false, 
            false, 
            false, 
            &inputHandler); 

     if(!_device) 
     { 
      std::cerr << "Error creating device" << std::endl; 
      return false; 
     } 
     _device->setWindowCaption(_caption.c_str()); 

    ////////////// 
    DebugDraw debugDraw(game._device); 
    debugDraw.setDebugMode(
    btIDebugDraw::DBG_DrawWireframe | 
    btIDebugDraw::DBG_DrawAabb | 
    btIDebugDraw::DBG_DrawContactPoints | 
    //btIDebugDraw::DBG_DrawText | 
    //btIDebugDraw::DBG_DrawConstraintLimits | 
    btIDebugDraw::DBG_DrawConstraints //| 
    ); 
    PhysicsEngine::_world->setDebugDrawer(&debugDraw); 

如果我讓_world公共我得到未處理的異常在0x00EC6910在Bullet01.exe:0000005:訪問衝突讀取位置00000000。

+0

如果你想從外面爲什麼不把它公開,然後實現它? – 2013-04-10 13:56:22

+6

聽起來像你需要一些'朋友' – 2013-04-10 13:56:29

+0

@CaptainObviously或適當的設計 – 2013-04-10 14:02:06

回答

1

在Physics Engine類中公開一些靜態函數,它返回一個引用或指向私有靜態變量_world的指針,然後調用該靜態函數。

PhysicsEngine::getWorld()->setDebugDrawer(&debugDraw); 

揭露以下方法

static btDynamicsWorld* getWorld() { return _world; } 
+0

謝謝你的工作......但是我仍然得到訪問衝突。我可能應該更多地考慮子彈物理。 – 2013-04-10 14:08:08

+0

你會得到什麼訪問衝突?您是否已將上述方法置於公開訪問之下? – Rush 2013-04-10 14:10:27

+0

我意識到自己的愚蠢,並將其置於私人,我認爲工作,但我沒有得到訪問衝突。現在我得到錯誤C2248:'GameEngine :: PhysicsEngine :: getWorld':無法訪問類'GameEngine :: PhysicsEngine'中聲明的私有成員 – 2013-04-10 14:13:58

0

將該班級聲明爲此班級中的朋友。然後該類的成員函數可以訪問這個私有靜態成員。

相關問題