这个指针由Object(this)设置!=这个

时间:2010-11-12 02:34:53

标签: c++

我的引擎的构造函数使用指向自身的指针(this)构造音频,视频和输入对象。但是,当我调试时,我看到我构造的所有类的enginePtr与调试器提供的值不同。

当我向内窥视时,我看到例如,pRender的enginePtr具有与引擎不同的值。其中大多数都设置为NULL,这会导致渲染崩溃。

这是我的引擎构造函数:

cEngine::cEngine( int flag ) {

    if ( !al_get_system_driver() ) {

        this->isRunning = true;

        al_init();

        // Uses DirectX by default, uncomment ALLEGRO_OPENGL for OpenGL.
        if ( flag == OPENGL_WINDOW || flag == OPENGL ) al_set_new_display_flags( ALLEGRO_RESIZABLE | ALLEGRO_OPENGL );
        else if ( flag == DIRECTX_WINDOW || flag == DIRECTX ) al_set_new_display_flags( ALLEGRO_RESIZABLE );
        else if ( flag == OPENGL_FULLSCREEN ) al_set_new_display_flags( ALLEGRO_FULLSCREEN | ALLEGRO_OPENGL );
        else if ( flag == DIRECTX_FULLSCREEN ) al_set_new_display_flags( ALLEGRO_FULLSCREEN );

        this->display = createDisplay( "Motherload C++", -1, -1, 640, 480 );

        srand( ( unsigned ) time(0) );

        pCam    = new cCam( this );
        pIO     = new cIO( this );
        pMap    = new cMap( this, setPoint( 50, 50 ), setPoint( 13, 20 ) ); // 13, 20
        pPlayer = new cPlayer( this );
        pAudio  = new cAudio( this );
        pRender = new cRender( this );
        pEvents = new cEvents( this );

    }
}

cRender构造函数:

cRender::cRender( cEngine* pEngine ) {

    this->pPlayerLoc    = pPlayerLoc;
    this->BLACK         = al_map_rgb(30, 100, 200);
    this->needsRedraw   = false;
    this->pEngine       = pEngine;

    al_init_font_addon();
    al_init_ttf_addon();

    splitImages();
    //this->font = al_load_font( "C:/resource/gisha.ttf", 24, 0 );
    //this->img = al_load_bitmap( "C:/resource/rock.png" );
}

由于

1 个答案:

答案 0 :(得分:1)

这不太可能。您的代码对我来说似乎很合适。相反或依赖于调试器,尝试打印出'this'的值以及您在pRenderer中存储的任何内容。有时,使用优化标志调试器不会正确显示变量值。