0
votes

I am trying to access a private static variable (*PhysicsEngine::_world->setDebugDrawer(&debugDraw);*) from another class.

First class:

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

Second class:

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);

If I make _world public I get Unhandled exception at 0x00EC6910 in Bullet01.exe: 0xC0000005: Access violation reading location 0x00000000.

2
if you wanna reach it from outside why not make it public then?fatihk
Sounds like you need some friendsCaptain Obvlious
@CaptainObvlious or proper designBartek Banachewicz
You don't get exception because of variable access type...neagoegab
Instead write a public method in PhysicsEngine that takes debugDraw and would call the setDebugDrawer on _world and set the debugDraw.Abhijit-K

2 Answers

1
votes

Expose some static function in the Physics Engine class which returns a reference or pointer to the private static variable _world then call that static function.

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

Expose the below method

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

Declare that class as Friend in this class. Then the member functions of that class can access this private static member.